java數(shù)據(jù)結(jié)構(gòu)之單向鏈表

? 單鏈表是鏈表中結(jié)構(gòu)最簡(jiǎn)單的。一個(gè)單鏈表的節(jié)點(diǎn) (Node) 分為兩個(gè)部分帮非,第一個(gè)部分 (data) 保存或者顯示關(guān)于節(jié)點(diǎn)的信息,另一個(gè)部分存儲(chǔ)下一個(gè)節(jié)點(diǎn)的地址。最后一個(gè)節(jié)點(diǎn)存儲(chǔ)地址的部分指向空值脯爪。

  單向鏈表只可向一個(gè)方向遍歷,一般查找一個(gè)節(jié)點(diǎn)的時(shí)候需要從第一個(gè)節(jié)點(diǎn)開始每次訪問下一個(gè)節(jié)點(diǎn)矿微,一直訪問到需要的位置痕慢。而插入一個(gè)節(jié)點(diǎn),對(duì)于單向鏈表涌矢,我們只提供在鏈表頭插入掖举,只需要將當(dāng)前插入的節(jié)點(diǎn)設(shè)置為頭節(jié)點(diǎn),next 指向原頭節(jié)點(diǎn)即可娜庇。刪除一個(gè)節(jié)點(diǎn)塔次,我們將該節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)的 next 指向該節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。

首先建立一個(gè)鏈表結(jié)點(diǎn)的類名秀,如下所示

package 數(shù)據(jù)結(jié)構(gòu);

public class Node {

? ? ? ? ? int data;//數(shù)據(jù)

? ? ? ? ? public Node next;//下一個(gè)結(jié)點(diǎn)

? ? ? ? ? public Node previous;//上一個(gè)結(jié)點(diǎn)

? ? ? ? ? public Node(int value){

? ? ? ? ? this.data=value;

? ? ? ? ? }

? ? ? ? ? public void display(){

? ? ? ? ? System.out.println(data+"");

? ? ? ? ? }

}

初始化鏈表:

package 數(shù)據(jù)結(jié)構(gòu);

public class LinkList {

Node first;//頭結(jié)點(diǎn)

? ? ? ? ? ? public LinkList(){

? ? ? ? ? ? first=null;//初始化頭結(jié)點(diǎn)為null

? ? ? ? ? ? }

? ? ? ? ? ? public void insertFirst(int value){//插入元素励负,在頭結(jié)點(diǎn)前面插入

? ? ? ? ? ? Node node=new Node(value);

? ? ? ? ? ? node.next=first;

? ? ? ? ? ? first=node;

? ? ? ? ? ? }

? ? ? ? ? ? public int deletFirst(){//刪除元素,從頭結(jié)點(diǎn)開始

? ? ? ? ? ? Node temp=first;

? ? ? ? ? ? first=first.next;//把頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)賦給它匕得,即刪除了頭結(jié)點(diǎn)

? ? ? ? ? ? return temp.data;//返回刪除的結(jié)點(diǎn)的數(shù)據(jù)

? ? ? ? ? ? }

? ? ? ? ? ? public void display(){//將鏈表的數(shù)據(jù)打印出來

? ? ? ? ? ? Node t=first;

? ? ? ? ? ? while(t.next!=null){//打印出除尾結(jié)點(diǎn)以外的數(shù)據(jù)

? ? ? ? ? ? t.display();

? ? ? ? ? ? t=t.next;

? ? ? ? ? ? }

? ? ? ? ? ? t.display();//打印尾結(jié)點(diǎn)的數(shù)據(jù)

? ? ? ? ? ? }

? ? ? ? ? ? public Node chazhao(int value){//按值查找

? ? ? ? ? ? Node tt=first;

? ? ? ? ? ? while(tt.data!=value){

? ? ? ? ? ? if(tt.next==null){

? ? ? ? ? ? return null;

? ? ? ? ? ? }

? ? ? ? ? ? tt=tt.next;

? ? ? ? ? ? }

? ? ? ? ? ? return tt;//返回查找的結(jié)點(diǎn)

? ? ? ? ? ? }

? ? ? ? ? ? public Node shangchu(int value){//按值刪除并輸出值

? ? ? ? ? ? Node tt=first;

? ? ? ? ? ? Node ty=first;

? ? ? ? ? ? while(tt.data!=value){

? ? ? ? ? ? if(tt.next==null){

? ? ? ? ? ? return null;

? ? ? ? ? ? }

? ? ? ? ? ? ty=tt;//ty是要?jiǎng)h除的結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)继榆,因?yàn)楹竺嬉痪浯a將tt的值變成了tt的下一個(gè)結(jié)點(diǎn)

? ? ? ? ? ? ? tt=tt.next;

? ? ? ? ? ? }

? ? ? ? ? ? if(tt==first){

? ? ? ? ? ? first=first.next;

? ? ? ? ? ? }

? ? ? ? ? ? else{

? ? ? ? ? ? ty.next=tt.next;//將tt的前面的結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)變成tt的下一結(jié)點(diǎn),即刪除了tt結(jié)點(diǎn)

? ? ? ? ? ? }

? ? ? ? ? ? return tt;//返回刪除的結(jié)點(diǎn)

? ? ? ? ? ? }

}

測(cè)試:

package 數(shù)據(jù)結(jié)構(gòu);

public class TextLinkList {

public static void main(String args[]){

? ? ? LinkList a=new LinkList();

? ? ? a.insertFirst(1);//插入數(shù)據(jù)

? ? ? a.insertFirst(2);

? ? ? a.insertFirst(3);

? ? ? a.display();//打印數(shù)據(jù)

? ? ? System.out.println("************");

? ? ? a.deletFirst();//刪除頭結(jié)點(diǎn)

? ? ? a.display();//打印數(shù)據(jù)

? ? ? System.out.println("************");

? ? ? Node node=a.chazhao(1);//查找data值為1的結(jié)點(diǎn)

? ? System.out.println(node.data);//輸出數(shù)據(jù)

? ? System.out.println("************");

? ? Node node1=a.shangchu(1);//刪除結(jié)點(diǎn)data值為1的數(shù)據(jù)

? ? System.out.println(node1.data);//打印數(shù)據(jù)

? ? System.out.println("************");

? ? a.display();


}}

輸出結(jié)果如下:


好啦,這次就到這里啦汁掠,有問題可以和我留言哦略吨!

郵箱:2321591758@qq.com

其他博客的鏈接:

Github個(gè)人網(wǎng)站知乎簡(jiǎn)書

歡迎各位訪問哦,這次就到這里啦考阱!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翠忠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乞榨,更是在濱河造成了極大的恐慌秽之,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姜凄,死亡現(xiàn)場(chǎng)離奇詭異政溃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)态秧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門董虱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事愤诱≡仆罚” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵淫半,是天一觀的道長(zhǎng)溃槐。 經(jīng)常有香客問我,道長(zhǎng)科吭,這世上最難降的妖魔是什么昏滴? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮对人,結(jié)果婚禮上谣殊,老公的妹妹穿的比我還像新娘。我一直安慰自己牺弄,他們只是感情好姻几,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著势告,像睡著了一般蛇捌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咱台,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天络拌,我揣著相機(jī)與錄音,去河邊找鬼吵护。 笑死盒音,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馅而。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼譬圣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瓮恭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起厘熟,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤屯蹦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绳姨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體登澜,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年飘庄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脑蠕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谴仙,靈堂內(nèi)的尸體忽然破棺而出迂求,到底是詐尸還是另有隱情,我是刑警寧澤晃跺,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布揩局,位于F島的核電站,受9級(jí)特大地震影響掀虎,放射性物質(zhì)發(fā)生泄漏凌盯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一烹玉、第九天 我趴在偏房一處隱蔽的房頂上張望十气。 院中可真熱鬧,春花似錦春霍、人聲如沸砸西。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芹枷。三九已至,卻和暖如春莲趣,著一層夾襖步出監(jiān)牢的瞬間鸳慈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工喧伞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留走芋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓潘鲫,卻偏偏與公主長(zhǎng)得像翁逞,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溉仑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容