成对交换节点
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循环是无限的,因为它基本上卡在前两个数字
在反转前两个元素之前存储第三个元素
我目前正在复习和复习我的数据结构,为工作面试做准备。我目前正在处理这个问题,我必须交换链接列表中的每 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循环是无限的,因为它基本上卡在前两个数字
在反转前两个元素之前存储第三个元素