1+ # Reverse the given linkedlist
2+
3+
4+ def reverse_iterative (self ):
5+ prev = None
6+ cur = self .head
7+ while cur :
8+ next_node = cur .next
9+ cur .next = prev
10+ prev = cur
11+ cur = cur .next
12+
13+ self .head = prev
14+
15+
16+ class Node :
17+ def __init__ (self , data ):
18+ self .data = data
19+ self .next = None
20+
21+
22+ class LinkedList :
23+ def __init__ (self ):
24+ self .head = None
25+
26+ def print_list (self ):
27+ cur_node = self .head
28+ while cur_node :
29+ print (cur_node .data )
30+ cur_node = cur_node .next
31+
32+ def append (self , data ):
33+ new_node = Node (data )
34+
35+ if self .head is None :
36+ self .head = new_node
37+ return
38+
39+ last_node = self .head
40+ while last_node .next :
41+ last_node = last_node .next
42+ last_node .next = new_node
43+
44+ def prepend (self , data ):
45+ new_node = Node (data )
46+
47+ new_node .next = self .head
48+ self .head = new_node
49+
50+ def insert_after_node (self , prev_node , data ):
51+
52+ if not prev_node :
53+ print ("Previous node does not exist." )
54+ return
55+
56+ new_node = Node (data )
57+
58+ new_node .next = prev_node .next
59+ prev_node .next = new_node
60+
61+ def delete_node (self , key ):
62+
63+ cur_node = self .head
64+
65+ if cur_node and cur_node .data == key :
66+ self .head = cur_node .next
67+ cur_node = None
68+ return
69+
70+ prev = None
71+ while cur_node and cur_node .data != key :
72+ prev = cur_node
73+ cur_node = cur_node .next
74+
75+ if cur_node is None :
76+ return
77+
78+ prev .next = cur_node .next
79+ cur_node = None
80+
81+ def delete_node_at_pos (self , pos ):
82+ if self .head :
83+ cur_node = self .head
84+
85+ if pos == 0 :
86+ self .head = cur_node .next
87+ cur_node = None
88+ return
89+
90+ prev = None
91+ count = 1
92+ while cur_node and count != pos :
93+ prev = cur_node
94+ cur_node = cur_node .next
95+ count += 1
96+
97+ if cur_node is None :
98+ return
99+
100+ prev .next = cur_node .next
101+ cur_node = None
102+
103+ def len_iterative (self ):
104+
105+ count = 0
106+ cur_node = self .head
107+
108+ while cur_node :
109+ count += 1
110+ cur_node = cur_node .next
111+ return count
112+
113+ def len_recursive (self , node ):
114+ if node is None :
115+ return 0
116+ return 1 + self .len_recursive (node .next )
117+
118+ def print_helper (self , node , name ):
119+ if node is None :
120+ print (name + ": None" )
121+ else :
122+ print (name + ":" + node .data )
123+
124+ def reverse_iterative (self ):
125+
126+ prev = None
127+ cur = self .head
128+ while cur :
129+ nxt = cur .next
130+ cur .next = prev
131+ prev = cur
132+ cur = nxt
133+ self .head = prev
134+
135+ llist = LinkedList ()
136+ llist .append ("A" )
137+ llist .append ("B" )
138+ llist .append ("C" )
139+ llist .append ("D" )
140+
141+ llist .reverse_iterative ()
142+
143+ llist .print_list ()
0 commit comments