資料結構 帶頭結點的單鏈表高階

2021-10-23 11:49:56 字數 1504 閱讀 7984

獲取單鏈表倒數第k個結點

實現將單鏈表反轉

實現單鏈表的逆序列印

備註對帶頭結點的單鏈表不太了解的可以參考[資料結構]-帶頭結點的單鏈表.本篇主要內容包括在之前的基礎上新增一些高階方法:統計單鏈表中有效元素個數,如何獲得單鏈表中倒數第k個結點,如何實現單鏈表的逆序,如何實現單鏈表結點的逆序列印。

通過輔助指標遍歷整個鍊錶,每訪問乙個結點則將統計的個數值加1,直到遍歷到鍊錶的結尾為止

//get valid size of linkedlist

public

static

intgetlength

(node head)

return length;

}

可以首先獲得整個鍊錶的總長度size,然後再從前往後遍歷單鏈表,找到size-k個位置即可

// get lastindexnode

public

static node getlastindexnode

(node head,

int index)

return tmp;

}

可以首先初始化乙個反轉鍊錶的頭結點,然後依次遍歷原始鍊錶,將獲取的元素採用頭插法插入到反轉鍊錶的頭結點後面,最終將原始鍊錶的頭結點指向反轉鍊錶的頭結點的next域即可

public

static

void

reverselist

(node head)

node reversehead =

newnode(0

,"");

node tmp = head.next;

node next = null;

while

(tmp != null)

head.next = reversehead.next;

}

1、可以考慮首先將原始的單鏈表反轉,然後順序遍歷該鍊錶即可,缺點是這種方式將會改變原始的鍊錶結構

2、可以使用棧來輔助實現,從前向後遍歷訪問單鏈表的結點,每訪問乙個則將其入棧,待所有結點均在棧內之後,實現出棧即可

public

static

void

reverseprint

(node head)

stack

stack =

newstack

(); node tmp = head.next;

while

(tmp != null)

while

(stack.

size()

>0)

}

完整的帶頭結點的單鏈錶類實現參考[資料結構]-帶頭結點的單鏈表,只需將以上實現的**新增到單鏈錶類的成員方法中,並且將單鏈錶類中的head屬性型別改變為public型別以便測試時可以直接訪問到頭結點。

資料結構 帶頭結點的單鏈表

比較坑爹的基礎啊,大把時間浪費在建構函式上,建構函式 出生決定命運!自己解決的bug,感覺還不錯。其實程式的核心是演算法,演算法建立在資料結構的基礎之上。大部分的程式設計師現在學的基本都是規則,而不是創造。但掌握了規則,也能創造很多財富。重新鞏固我弱爆了的資料結構,沒敲完資料結構的程式設計師不是好領...

資料結構 單鏈表(帶頭結點)

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。簡單講就是邏輯相鄰,物理不相鄰 帶頭結點 list.h prag...

資料結構 單鏈表 帶頭結點和不帶頭結點

1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...