鍊錶的基本操作

2021-09-25 02:23:13 字數 2444 閱讀 6909

鍊錶由乙個個節點連線而成的,即乙個個物件,該物件包含兩個屬性:節點值、下乙個節點的引用。同時也可以看到value屬性是用來儲存實際資訊的,而next屬性是用來建立節點間的聯絡。對於雙向鍊錶,需要兩個這樣的屬性來指向前面節點和後面節點。

public

class

listnode

}

​ *鍊錶是乙個帶頭大哥,拉著一群小弟。*所以先找到帶頭大哥,然後順藤摸瓜往後揪出所有小弟。小弟的數量也是有限的,最後乙個小弟的next屬性為null時,表示不再指向其它小弟了,即鍊錶結束了。

public

static

void

printlist

(listnode pnode)

while

(pnode != null)

}

​ 可以模擬陣列的遍歷操作去理解,arr.length == 0pnode == null都是表示陣列或鍊錶中沒有元素這種情況。陣列中遍歷元素的方式:

int i =0;

while

(i != arr.length)

鍊錶中遍歷元素的方式:

while

(pnode != null)

對比發現,陣列和鍊錶都具有流動性,即從頭到尾的索引變化。陣列受長度限制,而鍊錶受當前節點是否存在限制。

​ 在陣列中刪除的思想是覆蓋,先找到被刪除元素的位置,然後將其後的元素向前移動一位。而鍊錶中就不是覆蓋了,思路是,先找到要刪除節點的前乙個節點prenode,然後由當前節點curnode找到它的下個節點afternode = curnode.next,再將prenode.next = afternode,最後釋放curnode節點的空間。這是由鍊錶這種資料結構決定的,只用改變鍊錶的指向,再釋放被刪節點的空間。

public

static

void

deletenode

(listnode phead, listnode ptobedeleted)

listnode aimnode = curnode.next;

//目標節點

pre.next = aimnode;

//前節點指向目標節點

}

​ 在鍊錶的操作中,要明白curnode = curnode.next;跟陣列中i ++的目的是一樣的。這種方法需要先找到被刪節點的前乙個節點,這需要0(n)的時間複雜度。有沒有0(1)的解法內,我們想想鍊錶中有效的東西是value值不同,next只起到串聯的作用。

​ 我們可以這樣做,既然入參傳入被刪除的節點,可拿到它後乙個節點pnext=ptobedeleted.next將有乙個節點value值賦給要刪除節點ptobedeleted.value =pnext.value,這樣就不用遍歷刪除pnext即可。

public

static

void

deletenode1

(listnode phead, listnode ptobedeleted)

listnode pnext = ptobedeleted.next;

listnode pnextnext = pnext.next;

ptobedeleted.value = pnext.value;

ptobedeleted.next = pnextnext;

//要刪節點指向下下個節點

}

這有點像陣列中覆蓋刪除元素。

鍊錶中最多的是指標操作,搞清每個指標的定義,維持他們之間的不變關係。

題目鏈結

三個指標解法

public listnode reverselist(listnode head) 

// 最後pre到達的位置剛好是最末尾那個結點,即反轉後的頭結點

return pre;

}

解題思想

設定三個指標,分別指向當前乙個節點、當前節點、後乙個節點。當前節點的next本來是指向它的後乙個節點的。現在讓它指向它前乙個節點,就實現了鍊錶的反轉。但是當前節點與它後乙個節點連線就斷開了,因此在反轉鍊錶之前需要儲存當前節點的下個節點。以便鍊錶反向的過程中向前推進(當前指標和前一指標前移)。

鍊錶的基本操作

include include include include using namespace std struct listnode void initnode listnode node bool isempty listnode head void pushfront listnode hea...

鍊錶的基本操作

鍊錶操作是最基本的 必須掌握的知識點,最好滾瓜爛熟,透徹理解。工作時間短用的也不夠頻繁,還是總結一下比較好,以加強鞏固。1.單鏈表 結點形式 區分幾個概念 首節點 第乙個元素所在節點。頭指標 指向首節點的指標。頭結點 為了操作方便,在第乙個節點之前附設的乙個結點,此時指向頭結點的為頭指標。基本操作 ...

鍊錶的基本操作。。。

include node.h 列印鍊錶 void print node head printf n 從尾部插入 void insert tail node head,const int d while t next null t next p p next null 從頭部插入 void inser...