成对链表问题
Pairwise Linked List issue
交换链表中的元素:
成对交换元素
开始:A > B > C > D > E > Null
结束:B > A > D > C > E > Null
Node * pairOne = head;
Node * pairTwo = head.next;
if (pairOne == Null || PairTwo == Null)
return;
while (pairOne & pairTwo){
pairOne.next = pairTwo.next;
pairTwo.next = pairOne;
pairOne = pairOne.next;
pairTwo = pairOne.next;
}
我的逻辑有什么问题?
我似乎无法弄清楚为什么我做不到 B > A > D > C > E > Null
让我们看看您的 while 循环。在第一次迭代中,pairOne = A 和 pairTwo = B,因此在循环中您更新 A.next = C 和 B.next = A,这是正确的。当 pairOne = C 和 pairTwo = D 时,您将在第二次迭代中看到问题,您将更新 C.next = E 和 D.next = C,A.next 现在应该指向 D 而不是 C . 但是在你的代码中,你永远不会更新 link,所以你最终会得到 B > A > C > E > NULL。要解决您的问题,一种方法是保留 pairOne 的前一个值并更新其下一个值:
Node * pairOne = head;
Node * pairTwo = head.next;
Node prev = Null;
if (pairOne == Null || PairTwo == Null)
return;
while (pairOne & pairTwo){
pairOne.next = pairTwo.next;
pairTwo.next = pairOne;
if (prev) {
prev.setNext(pairTwo);
}
prev = pairOne;
pairOne = pairOne.next;
pairTwo = pairOne.next;
}
还有一点,你也需要更新头部。
交换链表中的元素:
成对交换元素 开始:A > B > C > D > E > Null 结束:B > A > D > C > E > Null
Node * pairOne = head;
Node * pairTwo = head.next;
if (pairOne == Null || PairTwo == Null)
return;
while (pairOne & pairTwo){
pairOne.next = pairTwo.next;
pairTwo.next = pairOne;
pairOne = pairOne.next;
pairTwo = pairOne.next;
}
我的逻辑有什么问题?
我似乎无法弄清楚为什么我做不到 B > A > D > C > E > Null
让我们看看您的 while 循环。在第一次迭代中,pairOne = A 和 pairTwo = B,因此在循环中您更新 A.next = C 和 B.next = A,这是正确的。当 pairOne = C 和 pairTwo = D 时,您将在第二次迭代中看到问题,您将更新 C.next = E 和 D.next = C,A.next 现在应该指向 D 而不是 C . 但是在你的代码中,你永远不会更新 link,所以你最终会得到 B > A > C > E > NULL。要解决您的问题,一种方法是保留 pairOne 的前一个值并更新其下一个值:
Node * pairOne = head;
Node * pairTwo = head.next;
Node prev = Null;
if (pairOne == Null || PairTwo == Null)
return;
while (pairOne & pairTwo){
pairOne.next = pairTwo.next;
pairTwo.next = pairOne;
if (prev) {
prev.setNext(pairTwo);
}
prev = pairOne;
pairOne = pairOne.next;
pairTwo = pairOne.next;
}
还有一点,你也需要更新头部。