資料結構速學筆記 單鏈表面試題整理總結

2021-10-06 23:07:36 字數 4034 閱讀 5733

單鏈表倒數第k個節點

單鏈表反轉鍊錶

單鏈表反向列印節點

/**

* 單鏈表倒數第k個節點

* 思路:1. 遍歷鍊錶計算出,有效節點size(頭節點排除在外)

* 2. 倒數k節點對應的節點: size-k

* 解釋:例如鍊錶:head(頭節點) -> a.next -> b.next ->c.next -> d.next

* head不是有效節點,所以head要排除在外

* 上述鍊錶有效節點是4個,取倒數第2節點,即c節點,是我們需要的。

* size-k=2 從第乙個有效節點,往後位移2位,即:從當前a節點,位移2位,是c節點。 即倒數k節點資料

* */

public

void

getk_node

(int k)

node curnode = headnode.next;

for(

int i=

0;i)log

("倒數k節點資料 "

+curnode);}

public

intgetsize()

return size;

}

**實現

/**

* 單鏈表反轉

*/public

void

reverse()

node temp = headnode;

node reversehead =

newnode(0

,"");

node curnode = temp.next;

// 當前鍊錶

node nextnode;

// 臨時儲存當前鍊錶的下乙個鍊錶元素

while

(curnode != null)

//分析4 --> 原鍊錶的頭節點指向新煉表頭節點後的第乙個元素(原表頭節點替換掉新表頭節點)

// 解釋 --> 新表頭節點,於後面的節點斷開,讓原表頭節點指向

temp.next = reversehead.next;

// 最終完成單鏈表的反轉

trycatch

(interruptedexception e)

}

**解釋:

/**

* 單鏈表,反向列印節點

* 遍歷鍊錶,逐個壓入棧中(棧的資料結構先進後),在遍歷棧,列印出來。結果符合反向列印鍊錶

*/public

void

reverseprint()

while

(stack.

size()

>0)

}

/**

* 帶頭節點的單鏈表

*/public

class

linklist

temp = temp.next;

} temp.next = addnode;

}/**

* 按照順序節點插入 例:1 、2 、3、4、5

*/public

void

addnodebyorder

(node addnode)

if(temp.next.num > addnode.num)

temp = temp.next;

} addnode.next = temp.next;

temp.next = addnode;

}/**

* 根據num 修改名字

*/public

void

upnode

(int num, string name)

if(temp.next.num == num)

temp = temp.next;}}

/** * delete

* 根據num刪除

*/public

void

delete

(int num)

if(temp.next.num == num)

temp = temp.next;}}

/** * 根據num 查處 對應的node

*/public node query

(int num)

if(temp.next.num == num)

temp = temp.next;

}return tempnode;

}/**

* 單鏈表反轉

*/public

void

reverse()

node temp = headnode;

node reversehead =

newnode(0

,"");

node curnode = temp.next;

// 當前鍊錶

node nextnode;

// 臨時儲存當前鍊錶的下乙個鍊錶元素

while

(curnode != null)

//分析4 --> 原鍊錶的頭節點指向新煉表頭節點後的第乙個元素(原表頭節點替換掉新表頭節點)

// 解釋 --> 新表頭節點,於後面的節點斷開,讓原表頭節點指向

temp.next = reversehead.next;

// 最終完成單鏈表的反轉

trycatch

(interruptedexception e)

}/**

* 單鏈表,反向列印節點

* 遍歷鍊錶,逐個壓入棧中(棧的資料結構先進後),在遍歷棧,列印出來。結果符合反向列印鍊錶

*/public

void

reverseprint()

while

(stack.

size()

>0)

}/**

* 單鏈表倒數第k個節點

* 思路:1. 遍歷鍊錶計算出,有效節點size(頭節點排除在外)

* 2. 倒數k節點對應的節點: size-k

* 解釋:例如鍊錶:head(頭節點) -> a.next -> b.next ->c.next -> d.next

* head不是有效節點,所以head要排除在外

* 上述鍊錶有效節點是4個,取倒數第2節點,即c節點,是我們需要的。

* size-k=2 從第乙個有效節點,往後位移2位,即:從當前a節點,位移2位,是c節點。 即倒數k節點資料

* */

public

void

getk_node

(int k)

node curnode = headnode.next;

for(

int i=

0;i)log

("倒數k節點資料 "

+curnode);}

public

intgetsize()

return size;

}/**

* 列印出當前鍊錶的所有元素

*/public

void

shownode()

throws interruptedexception

node temp = headnode.next;

// 第乙個元素

while

(true

) temp = temp.next;}}

public

static

class

node

@override

public string tostring()

';}}

}

資料結構(七) 單鏈表面試題 二

單鏈表的翻轉 思路 定義節點reversehead new heronode 遍歷鍊錶,遍歷乙個就放入最前端,放入新的鍊錶 head.next reversehead.next public static void reverselist heronode head if head.next nul...

資料結構 鏈表面試題總

以下 是在vs2013下編寫的 我們先來看一下測試結果 include include include include 鍊錶的定義 typedef int datatype typedef struct slistnode slistnode 初始化 void slistinit slistnode...

單鏈表 (面試題)

關於單鏈表的基本操作,之前已經總結過了,那些掌握之後算是了解了單鏈表是什麼?不過現在面試的題中,肯定不會只讓你回答單鏈表的基礎操作,總是會改變一些東西,或是擴充套件一下。下面就是一些關於單鏈表的擴充套件內容 include include include pragma warning disable...