交换链表元素:
成对交换元素start: 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。然而在你的代码中,你永远不会更新该链接,所以你最终会得到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;
}
还有一件事,你也需要更新标题