成对链接列表问题

时间:2015-09-03 23:53:24

标签: linked-list swap

在链接列表中交换元素:

成对交换元素 开始: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>空

1 个答案:

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

还有一件事,你需要更新头部。