我們希望給你一組鍊錶
1,2,3,4,5
然後讓你翻轉
2,1,4,3,5
這也是乙個演算法問題,那麼對於這種演算法至少需要三個指標
cache:存放第三個節點
begin:當前鏈對的第乙個節點
end:當前鏈隊的第二個節點
基本思想很簡單:
public static listnode reverse(listnode head)else
while (end != null&&end.next!= null)
return renode;
}
but...
很明顯,這樣的邏輯還存在乙個很嚴重的漏洞
當這個鍊錶只存在兩個時,是成立的,
但是每當存在四個時,我們將兩個作為一對,那麼,當我們對第二對發生交換時,第二對的end變成了begin,然而!!來自第一對的末位元素指向的卻是已經變成了「end」的begin!!
所以,翻轉一定會出錯!
那麼解決辦法就非常簡單了,我們需要引入第四個指標pairtail,用來指向交換之後的「begin」的end
public static listnode reverse(listnode head)else
while (end != null&&end.next!= null)
pairtail = begin;
//跳到下一對
begin = cache;
end = cache.next;
}return renode;
}
C 筆試題之實現單鏈錶兩兩反轉(置換)
兩兩反轉單鏈表就是把每兩個數反轉一次。如 a b c d e f兩兩反轉後變為 b a d c f e。具體 如下 include using namespace std struct node void display node head 列印鍊錶 else cout endl node reve...
實驗心得 喜報 實驗室研會獲兩項校級榮譽
在剛剛結束的武漢大學第十一屆 我心目中的好導師 第十五屆學術科技節系列活動中,實驗室研會積極組織同學參與,榮獲武漢大學第十一屆 我心目中的好導師 系列活動優秀組織單位 武漢大學2020年研究生學術科技活動優秀組織單位榮譽稱號!2020年,實驗室研會積極營造濃郁的學術氛圍,克服疫情帶來的影響,線上線下...
微軟推出HTML5實驗室站點及兩項原型技術
微軟互操作策略部門推出了html5實驗室站點 html5labs.interoperabilitybridges.com 將分享那些未被w3c或其他標準組織最終敲定的,早期的html5規範 原型技術 該部門總經理jean paoli今天宣布了此站點。同時微軟也發布了兩項原型技術 雙向通訊頻道簡化技術...