当我准备面试时,我正在刷新并审查我的数据结构。我目前正在解决这个问题,我必须在链接列表中交换每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;
}
由于某些原因,这给了我一个无限循环,即使我的逻辑对我来说似乎很合理。我做错了什么?
答案 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循环是无限的,因为它基本上停留在前两个数字
中在逆转前两个
之前存储第三个元素