欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):單鏈表與雙向鏈表

 更新時(shí)間:2021年08月01日 10:58:51   作者:去吧貓頭夜鷹  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單鏈表、雙向鏈表的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

單鏈表:

每個(gè)數(shù)據(jù)是以節(jié)點(diǎn)的形式存在的

每個(gè)節(jié)點(diǎn)分為數(shù)據(jù)域和指針域

數(shù)據(jù)域中保存該節(jié)點(diǎn)的數(shù)據(jù)

指針域中保存指向下一個(gè)節(jié)點(diǎn)的指針

實(shí)現(xiàn)思路:

節(jié)點(diǎn)類(lèi)SingleNode中保存數(shù)據(jù)和指向下一個(gè)節(jié)點(diǎn)的指針

單鏈表類(lèi)SingleLinkedList中保存鏈表的頭節(jié)點(diǎn),實(shí)現(xiàn)相關(guān)鏈表方法

對(duì)于鏈表方法,涉及到位置查找,如在指定位置增加、刪除節(jié)點(diǎn),需要使用一個(gè)臨時(shí)變量temp從頭節(jié)點(diǎn)開(kāi)始遍歷,直至找到對(duì)應(yīng)的位置。

對(duì)于節(jié)點(diǎn)的增加刪除,只需要修改相關(guān)結(jié)點(diǎn)的指針指向即可

代碼實(shí)現(xiàn):

節(jié)點(diǎn)類(lèi)SingleNode:

public class SingleNode {
	public int data;
	public SingleNode next;
	public SingleNode(int data) {
		this.data = data;
	}
	@Override
	public String toString() {
		return "SingleNode{" + "data=" + data + '}';
	}
}

單鏈表類(lèi)SingleLinkedList

public class SingleLinkedList {
	private SingleNode head = new SingleNode(0);
    //獲取頭結(jié)點(diǎn)
	public SingleNode getHead(){
		return head;
	}
	//添加節(jié)點(diǎn)
	public void add(SingleNode singleNode) {
		SingleNode temp = head;
		//找到鏈表最后一個(gè)節(jié)點(diǎn)
		while (temp.next != null) {
			temp = temp.next;
		}
		temp.next = singleNode;
	}
	//按順序添加節(jié)點(diǎn)
	public void addByOrder(SingleNode singleNode) {
		SingleNode temp = head;
		while (true) {
			if (temp.next == null) {
				//已經(jīng)遍歷到鏈表最后了
				break;
			} else if (temp.next.data > singleNode.data) {
				//找到應(yīng)插入的位置
				break;
			}
			temp = temp.next;
		}
		singleNode.next = temp.next;
		temp.next = singleNode;
	}
	//刪除節(jié)點(diǎn)
	public void delete(int data) {
		SingleNode temp = head;
		boolean flag = false;    //標(biāo)志是否找到待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
		while (true) {
			if (temp.next == null) {
				//已經(jīng)遍歷到鏈表最后了
				break;
			} else if (temp.next.data == data) {
				//找到待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if (flag) {
			temp.next = temp.next.next;
		} else {
			System.out.println("要?jiǎng)h除的節(jié)點(diǎn)不存在");
		}
	}
	//輸出鏈表
	public void show() {
		//判斷鏈表是否為空
		if (head.next == null) {
			System.out.println("鏈表為空");
			return;
		}
		SingleNode temp = head.next;
		while (temp != null) {
			System.out.println(temp);
			temp = temp.next;
		}
	}
}

雙向鏈表:

每個(gè)節(jié)點(diǎn)中除了保存了指向后一個(gè)節(jié)點(diǎn)的指針外,還保存了指向前一個(gè)節(jié)點(diǎn)的指針

實(shí)現(xiàn)思路:

相關(guān)方法實(shí)現(xiàn)與單鏈表類(lèi)似,不同點(diǎn)在于需要增加對(duì)指向前一個(gè)節(jié)點(diǎn)的指針的更改

代碼實(shí)現(xiàn):

節(jié)點(diǎn)類(lèi)DoubleNode:

public class DoubleNode {
	public int data;
	public DoubleNode next;
	public DoubleNode pre;
	public DoubleNode(int data) {
		this.data = data;
	}
	@Override
	public String toString() {
		return "DoubleNode{" + "data=" + data + '}';
	}
}

雙向鏈表類(lèi)DoubleLinkedList:

public class DoubleLinkedList {
	public DoubleNode head = new DoubleNode(0);
	//獲取頭結(jié)點(diǎn)
	public DoubleNode getHead() {
		return head;
	}
	//添加節(jié)點(diǎn)
	public void add(DoubleNode doubleNode) {
		DoubleNode temp = head;
		//找到鏈表最后一個(gè)節(jié)點(diǎn)
		while (temp.next != null) {
			temp = temp.next;
		}
		temp.next = doubleNode;
		doubleNode.pre = temp;
	}
	//刪除節(jié)點(diǎn)
	public void delete(int data) {
		DoubleNode temp = head.next;
		boolean flag = false;    //標(biāo)志是否找到待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
		while (true) {
			if (temp == null) {
				//已經(jīng)遍歷到鏈表最后了
				break;
			} else if (temp.data == data) {
				//找到待刪除節(jié)點(diǎn)
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if (flag) {
			temp.pre.next = temp.next;
			if (temp.next != null) {
				//若刪除節(jié)點(diǎn)不為最后一個(gè)節(jié)點(diǎn)
				temp.next.pre = temp.pre;
			}
		} else {
			System.out.println("要?jiǎng)h除的節(jié)點(diǎn)不存在");
		}
	}
	//輸出鏈表
	public void show() {
		//判斷鏈表是否為空
		if (head.next == null) {
			System.out.println("鏈表為空");
			return;
		}
		DoubleNode temp = head.next;
		while (temp != null) {
			System.out.println(temp);
			temp = temp.next;
		}
	}
}

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • HashMap原理及手寫(xiě)實(shí)現(xiàn)部分區(qū)塊鏈特征

    HashMap原理及手寫(xiě)實(shí)現(xiàn)部分區(qū)塊鏈特征

    這篇文章主要為大家介紹了HashMap原理及手寫(xiě)實(shí)現(xiàn)部分區(qū)塊鏈特征,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 關(guān)于LinkedList集合對(duì)元素進(jìn)行增查刪操作

    關(guān)于LinkedList集合對(duì)元素進(jìn)行增查刪操作

    LinkedList集合內(nèi)部包含有兩個(gè)Node類(lèi)型的first和last屬性維護(hù)一個(gè)雙向循環(huán)鏈表,在鏈表中的每一個(gè)元素都使用引用的方式來(lái)記住它的前一個(gè)元素和后一個(gè)元素,從而可以將所有的元素彼此連接起來(lái),需要的朋友可以參考下
    2023-04-04
  • 利用Java實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)庫(kù)

    利用Java實(shí)現(xiàn)動(dòng)態(tài)加載數(shù)據(jù)庫(kù)

    這篇文章主要為大家詳細(xì)介紹了一個(gè)java小案例,即動(dòng)態(tài)加載數(shù)據(jù)庫(kù)信息,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-10-10
  • Java Socket編程實(shí)例(四)- NIO TCP實(shí)踐

    Java Socket編程實(shí)例(四)- NIO TCP實(shí)踐

    這篇文章主要講解Java Socket編程中NIO TCP的實(shí)例,希望能給大家做一個(gè)參考。
    2016-06-06
  • Spring基礎(chǔ)之AOP的概念介紹

    Spring基礎(chǔ)之AOP的概念介紹

    AOP是Spring的關(guān)鍵特性之一,雖然Spring的IOC特性并不依賴(lài)于AOP,本文重點(diǎn)介紹AOP編程中的一些術(shù)語(yǔ),這些術(shù)語(yǔ)不僅僅局限于Spring,它適用于所有的AOP編程,感興趣的朋友一起看看吧
    2022-06-06
  • java若依框架集成redis緩存詳解

    java若依框架集成redis緩存詳解

    今天小編就為大家分享一篇關(guān)于java若依框架集成redis緩存的實(shí)現(xiàn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-08-08
  • 全面匯總SpringBoot和SpringClould常用注解

    全面匯總SpringBoot和SpringClould常用注解

    Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說(shuō)明、配置的功能,這篇文章就帶你來(lái)了解一下
    2021-08-08
  • javaSE,javaEE,javaME的區(qū)別小結(jié)

    javaSE,javaEE,javaME的區(qū)別小結(jié)

    本篇文章小編就為大家簡(jiǎn)單說(shuō)說(shuō)JavaSE、JavaEE、JavaME三者之間的區(qū)別,需要的朋友可以過(guò)來(lái)參考下,感興趣的小伙伴們可以參考一下
    2023-08-08
  • springSecurity用戶(hù)認(rèn)證和授權(quán)的實(shí)現(xiàn)

    springSecurity用戶(hù)認(rèn)證和授權(quán)的實(shí)現(xiàn)

    Spring?Security?是一個(gè)開(kāi)源的安全框架,提供了基于權(quán)限的訪(fǎng)問(wèn)控制、身份認(rèn)證的功能,本文主要介紹了springSecurity用戶(hù)認(rèn)證和授權(quán),具有一定參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • 簡(jiǎn)單工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    簡(jiǎn)單工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了簡(jiǎn)單工廠模式的相關(guān)資料,和大家一起學(xué)習(xí)靜態(tài)工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評(píng)論