【问题标题】:Pairwise Linked List issue成对链接列表问题
【发布时间】:2015-09-03 23:53:24
【问题描述】:

交换链表中的元素:

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

【问题讨论】:

    标签: linked-list swap


    【解决方案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 > 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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多