【算法】leetcode 86. 分隔链表

在做到第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)(应该吧?)

先写到这,后面在看看到底出什么错了。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值