2015-09-03 50 views
2

交換鏈表中的元素:成對鏈表問題

兩兩交換元素 開始: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> Null

回答

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

一件事,你需要太更新的頭部。