在链接列表中交换元素:
成对交换元素 开始:A> B> C> D> E>空值 结束:B> A> D> C> E>空
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>空
答案 0 :(得分:1)
让我们来看看你的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>空值。要解决您的问题,一种方法是保留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;
}
还有一件事,你需要更新头部。