File tree 1 file changed +86
-0
lines changed
1 file changed +86
-0
lines changed Original file line number Diff line number Diff line change
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 ()
You can’t perform that action at this time.
0 commit comments