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