LeetCode 24: Swap Nodes in Pairs(交换链表中的两个节点)

题目:Given a linked list, swap every two adjacent nodes and return its head. You may not modify the values in the list's nodes, only nodes itself may be changed. (大意:相邻位置的两个节点进行值交换,但是要求以节点为单位进行交换。)

先上代码,只能把逻辑实现,无力考虑性能,见谅。

class Solution:
    def swapPairs(self, head: 'ListNode') -> 'ListNode':
        if not head or not head.next:
            return head
        re=tmp=head.next
        p=tmp.next
        tmp.next=head
        tmp=tmp.next
        while p:
            q=p.next
            if q:
                tmp_p=q.next
                tmp.next=q
                q.next=p
                tmp=tmp.next
                tmp=tmp.next
                p=tmp_p
            else:
                tmp.next=p
                break
        else:
            tmp.next=None
        return re

以上是最终代码,最初的版本运行不成功(最开始的版本里面while循环后面没有跟else子句),一直提示超时。下面是分析:

首先在未进入while循环之前,指针结构如图所示:

如果在此时输出进行以Re开头的链表是一个循环链表,这也是前面说的超时的原因。当链表中节点个数为偶数时,while循环结束时产生的链表就是一个循环链表。当链表中的节点个数为奇数时,则不会出现这种情况。为了处理偶数个数的节点产生循环链表的情况,所以给while语句加一个else子句,把最后一个节点的next属性指向None.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值