成对交换节点

时间:2018-02-18 22:38:58

标签: java data-structures linked-list nodes swap

当我准备面试时,我正在刷新并审查我的数据结构。我目前正在解决这个问题,我必须在链接列表中交换每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 个答案:

答案 0 :(得分:0)

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

如果您的列表是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循环是无限的,因为它基本上停留在前两个数字

在逆转前两个

之前存储第三个元素