[Leetcode][python]Swap Nodes in Pairs/两两交换链表中的节点

题目大意

交换链表中相邻的两个元素。
注意第一个节点与第二个节点要交换位置,而第二个节点不用与第三个节点交换位置。
注意点:
不允许修改节点的值
只能用常量的额外空间

解题思路

该题费脑,绕来绕去的指向,这个解读比较清晰
来自:
https://shenjie1993.gitbooks.io/leetcode-python/024%20Swap%20Nodes%20in%20Pairs.html
比较常见的链表操作。下面看一下典型情况,如要交换链表中A->B->C->D中的B和C需要做如下操作:

  • 将A指向C

  • 将B指向D

  • 将C指向B

在头节点之前加一个假节点就可以使所有的交换都符合上面的情况。

代码

class Solution(object):
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dummy = ListNode(-1)
        dummy.next = head
        temp = dummy 
        while temp.next and temp.next.next:
            node1 = temp.next  # node1是B
            node2 = temp.next.next  # node2是C
            temp.next = node2  # A指向C
            node1.next = node2.next  # B指向D
            node2.next = node1  # C指向B
            temp = temp.next.next  # 跳过两个
        return dummy.next

总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值