成对链表问题

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;
}

还有一点,你也需要更新头部。