在做到第86题的时候,我的最初想法是有两个指针,一个指针管从头到特殊值x的位置,另一个指针则是从特殊值x到结尾,然后根据值的大小移动左右两边的指针,代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
pos = head
t = head
while pos.val != x:
pos = pos.next
left = head
right = pos
while right:
if right.val < x:
temp = right.next
right.next = left.next
left.next = right
left = right
right = temp
else:
right = right.next
return t
但是最后却报了出现环的错误,后来发现在例题中,最后一个元素是2,如果2移动过去的话,5的指针无法指向2,形成了环,所以我添加了一个记录指针,代码如下:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
pos = head
t = head
while pos.val != x:
pos = pos.next
left = head
right = pos
while right:
if right.val < x:
temp = right.next
pre = right
right.next = left.next
left.next = right
left = right
right = temp
else:
right = right.next
pre = right
pre.next = None
return t
结果最后的答案只有一半。。。。
我感觉是出错了,但是我没找到,5555。
看了题解的答案,是用了双指针去解决,不过空间复杂度就是O(n)了,我这个空间复杂度应该是O(1)(应该吧?)
先写到这,后面在看看到底出什么错了。。。