DSA、链表、交换节点

问题描述 投票:0回答:1

我正在尝试解决成对的交换节点(链表)。我有正确的代码,但我在解释交换步骤时陷入困境。

这是代码:

def swapPairs(head):
    pre = ListNode(0)
    pre.next = head

    while pre.next and pre.next.next:
        a = pre.next
        b = a.next
        pre.next, b.next, a.next = b, a, b.next
        pre = a

    return pre.next

例如,如果我的链表是1->2->3->4。最初a指向1,b指向2。在交换步骤中:如何不丢失2之后的链表?因为在我们实际执行 a.next = b.next 之前 b.next 会指向 a?

algorithm data-structures singly-linked-list
1个回答
0
投票

您必须保留下一对的起始节点以及到目前为止反转的列表的最后一个节点。我不使用Python编码,所以我可以提供一种算法来实现你正在寻找的东西。 您可以检查以下

  1. newHead=空

  2. 前一个节点=空

  3. while head is not null : // While 循环开始 curr = head.next; if curr 不为 null: // If 块 下一个=当前.下一个 curr.next=头 head.next=null 别的: 下一个=头 //If-else 块到此结束

    if prevNode is not null: // 另一个 if 块 prevNode.next=curr // 如果块在这里结束

    上一个节点=头

    if newNode is null : // 另一个 if 块 新节点=当前 // 如果块在这里结束

    头=下一个 // while 循环到此结束

  4. return newHead // 返回reverseList的头

© www.soinside.com 2019 - 2024. All rights reserved.