Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit cc2069a

Browse files
committed
added reverseLinkedList
1 parent ad5b89b commit cc2069a

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed

LinkedList/ReverseLinkedList.py

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
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

Comments
 (0)