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