LeetCode-python 24.两两交换链表中的节点

题目链接
难度:中等       类型: 链表


给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例

给定 1->2->3->4, 你应该返回 2->1->4->3.

解题思路


两个节点交换:

  1. 先保存head.next.next的节点为new_start,不然换完就找不到了
  2. 两节点交换:head, head.next = head.next, head
  3. 续上之后的链表,head.next.next = new_start
    4.以new_start开始重复1-3步,知道链表结尾,返回head

为了简化代码,可以用递归,修改第3步为:
head.next.next = self.swapPairs(new_start)

代码实现

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head or not head.next: return head
        new_start = head.next.next
        head, head.next = head.next, head
        head.next.next = self.swapPairs(new_start)
        return head

本文链接:https://www.jianshu.com/p/bc283e46001f

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 路上遇见一个阿姨杀鸡,我想了想,如果有一天家里需要,也需要我拿起刀,我会怎么办,我想了想,我会毫不犹豫,为了我...
    溪丫阅读 446评论 0 0
  • 在经过初试,预面试,复试之后,终于达成了这一年来的期望​,顺利考上了北邮网研计算机的学硕,也算没让家人太失望。从2...
    带土钦定六代目阅读 2,379评论 0 6
  • TCP/IP协议 1、三次握手的过程 (1)、第一次握手 建立连接时,客户端发送SYN包(seq=j)到服...
    puurutsjdy阅读 176评论 0 0