使用帶 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...