Skip to content

Commit 978fe13

Browse files
committed
sorting linked list
1 parent 00c9649 commit 978fe13

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

merge_sort_linked_list.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.next = None
5+
6+
7+
class LinkedList:
8+
def __init__(self):
9+
self.head = None
10+
11+
def append(self, data):
12+
if not self.head:
13+
self.head = Node(data)
14+
return
15+
new_node = Node(data)
16+
curr = self.head
17+
while curr.next:
18+
curr = curr.next
19+
curr.next = new_node
20+
return
21+
22+
def sortedMerge(self, a, b):
23+
result = None
24+
25+
if a == None:
26+
return b
27+
if b == None:
28+
return a
29+
30+
if a.data <= b.data:
31+
result = a
32+
result.next = self.sortedMerge(a.next, b)
33+
else:
34+
result = b
35+
result.next = self.sortedMerge(a, b.next)
36+
return result
37+
38+
39+
def mergeSort(self, head):
40+
41+
if head == None or head.next == None:
42+
return head
43+
44+
middle = self.getMiddle(head)
45+
nexttomiddle = middle.next
46+
middle.next = None
47+
48+
left = self.mergeSort(head)
49+
right = self.mergeSort(nexttomiddle)
50+
51+
sortedlist = self.sortedMerge(left, right)
52+
return sortedlist
53+
54+
def getMiddle(self, head):
55+
56+
if head == None:
57+
return head
58+
59+
slow = head
60+
fast = head
61+
62+
while slow.next != None and slow.next.next != None:
63+
64+
slow = slow.next
65+
fast = fast.next.next
66+
67+
return slow
68+
69+
70+
def printList(self):
71+
temp = self.head
72+
while temp:
73+
print(temp.data, end= " ")
74+
temp = temp.next
75+
print(' \n ')
76+
77+
78+
l1 = LinkedList()
79+
l1.append(40)
80+
l1.append(30)
81+
l1.append(20)
82+
l1.append(10)
83+
l1.printList()
84+
l1.head = l1.mergeSort(l1.head)
85+
print("after sorting linked list:")
86+
l1.printList()

0 commit comments

Comments
 (0)