File tree Expand file tree Collapse file tree 1 file changed +80
-0
lines changed Expand file tree Collapse file tree 1 file changed +80
-0
lines changed Original file line number Diff line number Diff line change 1+ # Definition for singly-linked list.
2+ class ListNode :
3+ def __init__ (self , val = 0 , next = None ):
4+ self .val = val
5+ self .next = next
6+
7+
8+ class Solution :
9+ def reorderList (self , head : ListNode ) -> None :
10+ """
11+ Do not return anything, modify head in-place instead.
12+ """
13+ if not head :
14+ return
15+ vec = list ()
16+
17+ node = head
18+ while node :
19+ vec .append (node )
20+ node = node .next
21+
22+ i , j = 0 , len (vec ) - 1
23+
24+ while i < j :
25+ vec [i ].next = vec [j ]
26+ i += 1
27+ vec [j ].next = vec [i ]
28+ j -= 1
29+ vec [i ].next = None
30+
31+ def reorderList_2 (self , head : ListNode ) -> None :
32+ def find_mid (head : ListNode ):
33+ slow = fast = head
34+ while fast .next and fast .next .next :
35+ slow = slow .next
36+ fast = fast .next .next
37+ return slow
38+
39+ def reverse (head : ListNode ):
40+ pre = None
41+ cur = head
42+ while cur :
43+ tmp = cur .next
44+ cur .next = pre
45+ pre = cur
46+ cur = tmp
47+ return pre
48+
49+ def merge (l1 : ListNode , l2 : ListNode ):
50+ while l1 and l2 :
51+ tmp1 = l1 .next
52+ tmp2 = l2 .next
53+
54+ l1 .next = l2
55+ l1 = tmp1
56+ l2 .next = l1
57+ l2 = tmp2
58+
59+ if not head :
60+ return
61+ mid = find_mid (head )
62+ l1 , l2 = head , mid .next
63+ mid .next = None
64+ l2 = reverse (l2 )
65+ merge (l1 , l2 )
66+
67+
68+ if __name__ == '__main__' :
69+ node1 = ListNode (1 )
70+ node2 = ListNode (2 )
71+ node3 = ListNode (3 )
72+ node4 = ListNode (4 )
73+ node5 = ListNode (5 )
74+ node1 .next = node2
75+ node2 .next = node3
76+ node3 .next = node4
77+ node4 .next = node5
78+
79+ solution = Solution ()
80+ print (solution .reorderList_2 (node1 ))
You can’t perform that action at this time.
0 commit comments