成对交换节点

Swap Nodes in Pairs

我目前正在复习和复习我的数据结构,为工作面试做准备。我目前正在处理这个问题,我必须交换链接列表中的每 2 个节点。我的代码如下:

public ListNode swapPairs(ListNode head) {
    ListNode dummy = new ListNode(0); 
    dummy.next = head;
    while (head != null && head.next != null){
        ListNode cur = head;
        ListNode prev = head.next;
        head = prev;
        head.next = cur;
        head.next.next = prev.next;
        head = prev.next;

    }
    return dummy.next;
}

出于某种原因,这给了我一个无限循环,尽管我的逻辑对我来说似乎非常合理。我做错了什么?

您已经丢失了列表后面的元素。

如果您的列表是 1->2->3

第一个

    curr=1
    prev=head.next=2

现在

    head = prev; head=2

    head.next = cur; head.next=1

此处您已修改prev.next。所以 prev.next 基本上是 1

下面的语句现在导致循环

    head.next.next = prev.next;

这样,您就无法访问 3 while循环是无限的,因为它基本上卡在前两个数字

在反转前两个元素之前存储第三个元素