-
Notifications
You must be signed in to change notification settings - Fork 43
/
partition-list.py
66 lines (51 loc) · 1.46 KB
/
partition-list.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# V1
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
if self:
return "{} -> {}".format(self.val, repr(self.__next__))
class Solution(object):
# @param head, a ListNode
# @param x, an integer
# @return a ListNode
def partition(self, head, x):
left = []
right = []
cur = head
while cur:
if cur.val < x:
left.append(cur.val)
else:
right.append(cur.val)
cur = cur.__next__
return left + right
# V2
# Time: O(n)
# Space: O(1)
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
if self:
return "{} -> {}".format(self.val, repr(self.__next__))
class Solution(object):
# @param head, a ListNode
# @param x, an integer
# @return a ListNode
def partition(self, head, x):
dummySmaller, dummyGreater = ListNode(-1), ListNode(-1)
smaller, greater = dummySmaller, dummyGreater
while head:
if head.val < x:
smaller.next = head
smaller = smaller.__next__
else:
greater.next = head
greater = greater.__next__
head = head.__next__
smaller.next = dummyGreater.__next__
greater.next = None
return dummySmaller.__next__