主要完成了三道單鏈表的算法題和學習了雙鏈表的概念及其增刪改查
一、刪除單鏈表中的重複的元素。如1-2-3-3-4-4 輸出爲1-2
思想:這種算法題就是遍歷鏈表將重複的數字刪除就行,定義指針n1,n2,n3,n2和n3爲移動的指針,主要比較相連的數據是否相同,也就是肯定相同數據的個數,n1做爲n2的前一個節點,n1->next=n3;直接將n2與n3之間的元素刪除,當n3爲空時,遍歷也就結束。可是此題須要注意:當前幾個節點相同時,這時候須要改變頭結點的位置;還得注意尾部都相同時n3爲空的狀況。
二、拷貝帶有隨機節點的鏈表。
思想:這題思想主要分爲3步,一:複製鏈表的節點,並依次鏈接在原節點的後面,二:找複製節點的random節點,這也是這題的難點,可是能夠放在原鏈表來考慮,由於原鏈表的random是肯定的,而原鏈表的random的next就是拷貝節點的random。三:拆,將原鏈表和拷貝的鏈表拆開。
三、將一個無序的單鏈表利用插序的方法插成有序的。
思想:取下頭節點看成一個獨立的有序鏈表,遍歷原鏈表剩下的元素,若是比獨立的頭節點小,就頭插法插到獨立的節點中去,若是大於獨立頭結點但小於其中的某個節點,則插到其中間位置,若是比獨立節點的尾還大,就用尾插法插到其獨立的尾部。總結就是頭插,任意位置插,尾插。算法
整體來講今天這3題難度不小,考慮的東西多,而且容易錯。仍是得努力。dom
循環雙向鏈表得增刪改查
首先循環雙向鏈表得增刪得時間複雜度都爲0(1);
得有個邵兵節點做爲頭結點,方便操做,遍歷雙鏈表時,條件爲while(head->next!=head)由於頭結點得下一個節點若是等於頭結點意味着鏈表遍歷完成,再也不是while(head)由於沒有尾指針。ide