雙向鍊錶實戰

2021-10-20 22:20:53 字數 3279 閱讀 6327

使用帶 head 頭的雙向鍊錶實現水滸英雄排行榜。

a 單向鍊錶:查詢的方向只能是乙個方向,而雙向鍊錶可以向前或者向後查詢。

b 單向鍊錶不能自我刪除,需要靠輔助節點 ,而雙向鍊錶,則可以自我刪除。單鏈表刪除節點時,總要找到temp節點,temp節點是待刪除節點的前乙個節點。

a 雙向鍊錶遍歷方法和單鏈表一樣,只是可以向前,也可以向後查詢。

b 新增,預設新增到雙向鍊錶的最後。

第一步:先找到雙向鍊錶的最後這個節點。

第二步:temp.next = newheronode

第三步:newheronode.pre = temp;

c 雙向鍊錶修改和單向鍊錶一樣。

d 雙向鍊錶刪除可以實現自我刪除某個節點。

第一步:直接找到要刪除的這個節點,比如 temp

第二步:temp.pre.next = temp.next

第三步:temp.next.pre = temp.pre;

package com.atguigu.linkedlist;

/*** @classname: doublelinkedlistdemo

* @description: 雙向鍊錶

* @date: 2021/3/3

* @author: cakin

*/public class doublelinkedlistdemo

}/**

* @classname: doublelinkedlistdemo

* @description: 雙向鍊錶的類類

* @date: 2021/3/3

* @author: cakin

*/class doublelinkedlist

/*** 功能描述:遍歷雙向鍊錶

** @author cakin

* @date 2021/3/3

*/public void list()

// 輔助變數指向第個節點

heronode2 temp = head.next;

while (true)

// 輸出節點的資訊

system.out.println(temp);

// 將temp後移

temp = temp.next;}}

/*** 功能描述:新增乙個節點到雙向鍊錶的最後

** @author cakin

* @date 2021/3/3

* @param heronode 要新增的英雄節點

*/public void add(heronode2 heronode)

// 如果沒有找到最後, 將temp後移

temp = temp.next;

}// 當退出while迴圈時,temp就指向了鍊錶的最後

// 形成乙個雙向鍊錶

temp.next = heronode;

heronode.pre = temp;

}/**

* 功能描述:修改乙個節點的內容

** @author cakin

* @date 2021/3/3

* @param newheronode 待修改的英雄節點

* @description:雙向鍊錶的節點內容修改和單向鍊錶一樣

*/public void update(heronode2 newheronode)

// 找到需要修改的節點, 根據no編號

// 定義乙個輔助變數

heronode2 temp = head.next;

boolean flag = false; // 表示是否找到該節點

while (true)

if (temp.no == newheronode.no)

temp = temp.next;

}// 根據flag判斷是否找到要修改的節點

if (flag) else

}/**

* 功能描述:從雙向鍊錶中刪除乙個節點

** @author cakin

* @date 2021/3/3

* @param no 待刪除節點的編號

* @description:說明

* 1 對於雙向鍊錶,我們可以直接找到要刪除的這個節點

* 2 找到後,自我刪除即可

*/public void del(int no)

heronode2 temp = head.next; // 輔助變數指向第乙個節點

boolean flag = false; // 標誌是否找到待刪除節點的

while (true)

if (temp.no == no)

temp = temp.next; // temp後移,遍歷

}// 判斷flag

if (flag)

} else

}}/**

* @classname: heronode2

* @description: 英雄節點

* @date: 2021/3/3

* @author: cakin

*/class heronode2

@override

public string tostring()

}

雙向鍊錶的測試

heronode [no=1, name=宋江, nickname=及時雨]

heronode [no=2, name=盧俊義, nickname=玉麒麟]

heronode [no=3, name=吳用, nickname=智多星]

heronode [no=4, name=林沖, nickname=豹子頭]

修改後的鍊錶情況

heronode [no=1, name=宋江, nickname=及時雨]

heronode [no=2, name=盧俊義, nickname=玉麒麟]

heronode [no=3, name=吳用, nickname=智多星]

heronode [no=4, name=公孫勝, nickname=入雲龍]

刪除後的鍊錶情況~~

heronode [no=1, name=宋江, nickname=及時雨]

heronode [no=2, name=盧俊義, nickname=玉麒麟]

heronode [no=4, name=公孫勝, nickname=入雲龍]

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...

雙向鍊錶(鍊錶)

雙向鍊錶 每個節點包含指向後繼節點的指標和指向前驅節點的指標。繼承關係圖 實體圖 duallinklist.h duallinklist 雙向鍊錶類模板 成員變數 node 節點實體 m header 頭節點 m length 鍊錶長度 m step 步進長度 m current 當前節點前乙個節點...

雙向鍊錶 3 反轉雙向鍊錶

雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...