資料結構與演算法(3)單鏈表的四道面試題

2021-10-06 15:21:27 字數 2563 閱讀 4704

/**

* 方法:獲取到單鏈表的節點個數(如果是帶頭節點的鍊錶,需求不統計頭結點)

* * @param head:鍊錶的頭結點

* @return:length 有效節點個數

*/public

static

intgetlength

(heronode head)

int length =0;

//定義乙個輔助變數,這裡沒有統計頭結點

heronode cur = head.next;

while

(cur != null)

return length;

}

/**

* 思路:

* 1.編寫乙個方法,接受head節點,同時接受乙個index

* 2.index表示倒數第index個節點

* 3.先把鍊錶從頭到尾遍歷,使用getlength()方法得到鍊錶的總長度size

* 4.得到size後,從鍊錶的第乙個開始遍歷(size - index)個,就可以得到

* 5. 如果找到了,就返回該節點,否則返回null

*/public

static heronode findlastindexnode

(heronode head,

int index)

//先得到鍊錶的長度(節點個數)

int size =

getlength

(head)

;//遍歷到 (size - index) 位置,就是倒數第k的節點

//首先先做乙個index的校驗

if(index <=

0|| index > size)

//定義乙個輔助變數,for迴圈定位到倒數的index

heronode cur = head.next;

for(

int i =

0; i <

(size - index)

; i++

)return cur;

}

1. 分析思路**

2. 思路

(1)先定義乙個節點reversehead = new heronode();

(2)從頭到尾遍歷原來的鍊錶,每遍歷乙個節點,就將其取出,並放在新的鍊錶reversehead的最前端

(3)原來的鍊錶的head.next = reversrhead.next

3. **實現

public

static

void

reverselist

(heronode head)

//定義乙個輔助變數,幫助遍歷原來的鍊錶

heronode cur = head.next;

heronode next = null;

//指向當前節點[cur]的下乙個節點

heronode reversehead =

newheronode(0

,"",""

);//遍歷原來的鍊錶,每遍歷乙個節點,就將其取出,並放在新的鍊錶reversehead的最前端

while

(cur != null)

//將head.next指向reversehead.next,實現單鏈表的反轉

head.next = reversehead.next;

}

1. 思路分析(1)可以先將鍊錶進行反轉,然後在遍歷,但是這樣會破壞原來的單鏈表結構【不建議】

(2)可以使用這個資料結構,將各個節點壓入棧中,利用棧先進後出的特點,就實現了逆序列印的效果

2. 關於棧的乙個小demo

public

class

stackdemo

}}

3. **實現

public

static

void

reverseprint

(heronode head)

//建立乙個棧,將各個節點壓入棧

stack

stack =

newstack

<

>()

; heronode cur = null;

//將鍊錶的所有節點壓入棧

while

(cur != null)

//取出節點

while

(stack.

size()

>0)

}

單鏈表(演算法與資料結構)

鍊錶 單鏈表 為每個結點新增1個指標域,每個結點包括兩個域 資料域 存放元素本身資訊 指標域 存放後繼結點的儲存位置 指向鍊錶中第乙個結點的指標,稱為這個鍊錶的頭指標。最後乙個元素的指標不指向任何結點,稱為空指標,圖示中用 表示,在演算法中用 null 表示 帶頭結點的單鏈表 頭結點 可以不存資訊,...

資料結構與演算法 單鏈表

鍊錶是有序的列表,但是它在記憶體中是儲存如下 鍊錶是以節點的方式來儲存的 鍊錶的各個節點不一定是連續儲存的 鍊錶分帶頭結點的鍊錶和不帶頭結點的鍊錶 新增先建立乙個 head 頭結點,作用就是表示單鏈表的頭 後面我們每新增乙個結點,就直接加入到鍊錶的最後 遍歷 通過乙個輔助變數,幫助來遍歷整個鍊錶 第...

資料結構與演算法 單鏈表

單鏈表的建立 1.建立乙個head頭節點,作用就是表示單鏈表的頭 2.後面我們每新增乙個節點,就直接加入鍊錶的最後 定義heronode,每個heronode物件就是乙個節點 class heronode 為了顯示方法,重新tostring public string tostring 定義sing...