【问题标题】:Swap Nodes in Pairs成对交换节点
【发布时间】:2018-02-18 22:38:57
【问题描述】:

在准备面试时,我目前正在复习和审查我的数据结构。我目前正在解决这个问题,我必须交换链接列表中的每 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) 如果 head.next.next 不存在怎么办?并且只有 head.next 存在? 2)永远不要修改函数的参数,即head。使用温度。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2019-08-28
    • 2018-11-05
    • 2020-07-17
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多