leetcode 24. 两两交换链表中的节点——链表

【题目】

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

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

    示例:

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

【解题思路】

    最重要的一点:建立一个空头

    过程:

  1. 设立一个新的空头,nhead = ListNode(None)
  2. 将新的空头的下一个节点指向原链表的头结点head,nhead.next = head
  3. 我假设空头的下一个节点和下下个节点为a和b,则a, b = c.next, c.next.next,利用空头、a和b三个节点来对a和b两个节点进行交互
  4. 将空头指向空头的下下个节点,重复进行交换,直到为空

图像如下:

【python代码如下】

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        if head == None or head.next == None:
            return head
        nhead = ListNode(None)
        nhead.next = head
        c = nhead
        while c.next and c.next.next:
            a, b = c.next, c.next.next
            c.next = b
            a.next = b.next
            b.next = a
            c = c.next.next
        return nhead.next

【复杂度分析】

  • 时间复杂度:O(N),其中 N 指的是链表的节点数量。
  • 空间复杂度:O(1)。

猜你喜欢

转载自blog.csdn.net/kuangd_1992/article/details/104128121