File tree 1 file changed +94
-0
lines changed
1 file changed +94
-0
lines changed Original file line number Diff line number Diff line change
1
+ #!/usr/bin/python
2
+ # -*- coding: utf-8 -*-
3
+ # Definition for singly-linked list.
4
+ class ListNode :
5
+ def __init__ (self , x ):
6
+ self .val = x
7
+ self .next = None
8
+
9
+ class Solution :
10
+ # @param head, a ListNode
11
+ # @return a ListNode
12
+ def sortList (self , head ):
13
+ if None == head or None == head .next :
14
+ return head
15
+ pivot = head
16
+ node = head .next
17
+ less_list = None
18
+ greater_list = None
19
+ equal_list = pivot
20
+
21
+ while None != node :
22
+ tmp = node .next
23
+ if pivot .val > node .val :
24
+ node .next = less_list
25
+ less_list = node
26
+ elif pivot .val < node .val :
27
+ node .next = greater_list
28
+ greater_list = node
29
+ else :
30
+ equal_list .next = node
31
+ equal_list = node
32
+ node = tmp
33
+ #greater_list指向等于pivot的链表
34
+ equal_list .next = None
35
+ #less_list指向小于pivot的链表
36
+ less_list = self .sortList (less_list )
37
+ #greater_list指向大于pivot的链表
38
+ greater_list = self .sortList (greater_list )
39
+ less_list = self .connect (less_list , pivot , greater_list )
40
+
41
+ return less_list
42
+
43
+ def connect (self , less_list , pivot , greater_list ):
44
+ node = pivot
45
+ while True :
46
+ if node .next == None :
47
+ node .next = greater_list
48
+ break
49
+ node = node .next
50
+
51
+ node = less_list
52
+ if less_list == None :
53
+ less_list = pivot
54
+ else :
55
+ while node .next != None :
56
+ node = node .next
57
+ node .next = pivot
58
+ return less_list
59
+
60
+ if __name__ == "__main__" :
61
+ s = Solution ()
62
+ head = ListNode (49 )
63
+ node_1 = ListNode (38 )
64
+ head .next = node_1
65
+
66
+ node_2 = ListNode (65 )
67
+ node_1 .next = node_2
68
+
69
+ node_3 = ListNode (57 )
70
+ node_2 .next = node_3
71
+
72
+ node_4 = ListNode (76 )
73
+ node_3 .next = node_4
74
+
75
+ node_5 = ListNode (33 )
76
+ node_4 .next = node_5
77
+
78
+ node_6 = ListNode (27 )
79
+ node_5 .next = node_6
80
+
81
+ #node_7 = ListNode(13)
82
+ #node_6.next = node_7
83
+
84
+ node = head
85
+ while None != node :
86
+ print node .val
87
+ node = node .next
88
+ print '========================='
89
+
90
+ node = s .sortList (head )
91
+ print '#########################'
92
+ while None != node :
93
+ print node .val
94
+ node = node .next
You can’t perform that action at this time.
0 commit comments