a、b位置链表节点交换方法,卡死在Java
Swap method of Linked List Nodes at Position a and b, stuck on infinite loop in Java
所以,我试图在我的书中解决这个问题,它要求在给定位置的给定链表中交换节点,好吧,我已经尝试实现一种名为 "swap" 的方法,并且它陷入无限循环,我不明白为什么
方法如下:
public void swap(LinkedList L1, int start, int end) {
Node ptr1, prev1, ptr2, prev2;
ptr1 = head;
prev1 = ptr1;
int count1 = 0;
int count2 = 0;
if ((start <= size()) && (start > 0) && (end <= size()) && (end > 0)) {
while (count1 != start && ptr1 != null) {
prev1 = ptr1;
ptr1 = ptr1.link;
count1++;
}
ptr2 = head;
prev2 = ptr2;
while (count2 != end && ptr2 != null) {
prev2 = ptr2;
ptr2 = ptr2.link;
count2++;
}
prev1.setLink(prev2.link);
ptr2.setLink(ptr1.link);
prev2.setLink(ptr1.link);
ptr1.setLink(ptr2.link);
}
}
这是主要方法,我试图在以下位置测试该方法:
public static void main(String[] args) {
LinkedList L1 = new LinkedList();
L1.addToStart(5);
L1.addToStart(7);
L1.addToStart(23);
L1.addToStart(56);
L1.addToStart(52);
L1.addToStart(22);
L1.addToStart(57);
L1.addToStart(99);
L1.addToStart(34);
L1.addToStart(74);
L1.outputList();
L1.swap(L1, 2, 4);
L1.outputList();
你 link 做事不正确。您将 ptr2 和 prev2 link 都设为 ptr1.link.
假设这是列表
A -> B -> C -> D -> E -> F
我们要切换 B 和 E。
prev1 = A
ptr1 = B
prev2 = D
ptr1 = E
重新linked,看起来像
A -> B -> C -> D -> E -> F
|-------------------^
|-------------------^
^---------|
^--------|
A -> E -> C -> D -> B -> F
在代码中:
Node temp = ptr1.link;
prev1.setLink(ptr2);
ptr1.setLink(ptr2.link);
prev2.setLink(ptr1);
ptr2.setLink(temp);
所以,我试图在我的书中解决这个问题,它要求在给定位置的给定链表中交换节点,好吧,我已经尝试实现一种名为 "swap" 的方法,并且它陷入无限循环,我不明白为什么
方法如下:
public void swap(LinkedList L1, int start, int end) {
Node ptr1, prev1, ptr2, prev2;
ptr1 = head;
prev1 = ptr1;
int count1 = 0;
int count2 = 0;
if ((start <= size()) && (start > 0) && (end <= size()) && (end > 0)) {
while (count1 != start && ptr1 != null) {
prev1 = ptr1;
ptr1 = ptr1.link;
count1++;
}
ptr2 = head;
prev2 = ptr2;
while (count2 != end && ptr2 != null) {
prev2 = ptr2;
ptr2 = ptr2.link;
count2++;
}
prev1.setLink(prev2.link);
ptr2.setLink(ptr1.link);
prev2.setLink(ptr1.link);
ptr1.setLink(ptr2.link);
}
}
这是主要方法,我试图在以下位置测试该方法:
public static void main(String[] args) {
LinkedList L1 = new LinkedList();
L1.addToStart(5);
L1.addToStart(7);
L1.addToStart(23);
L1.addToStart(56);
L1.addToStart(52);
L1.addToStart(22);
L1.addToStart(57);
L1.addToStart(99);
L1.addToStart(34);
L1.addToStart(74);
L1.outputList();
L1.swap(L1, 2, 4);
L1.outputList();
你 link 做事不正确。您将 ptr2 和 prev2 link 都设为 ptr1.link.
假设这是列表
A -> B -> C -> D -> E -> F
我们要切换 B 和 E。
prev1 = A
ptr1 = B
prev2 = D
ptr1 = E
重新linked,看起来像
A -> B -> C -> D -> E -> F
|-------------------^
|-------------------^
^---------|
^--------|
A -> E -> C -> D -> B -> F
在代码中:
Node temp = ptr1.link;
prev1.setLink(ptr2);
ptr1.setLink(ptr2.link);
prev2.setLink(ptr1);
ptr2.setLink(temp);