最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

單鏈表:

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

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

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

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

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

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

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

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

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

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

節(jié)點(diǎn)類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 + '}';
	}
}

單鏈表類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;
		//找到鏈表最后一個節(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)的前一個節(jié)點(diǎn)
		while (true) {
			if (temp.next == null) {
				//已經(jīng)遍歷到鏈表最后了
				break;
			} else if (temp.next.data == data) {
				//找到待刪除節(jié)點(diǎn)的前一個節(jié)點(diǎn)
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if (flag) {
			temp.next = temp.next.next;
		} else {
			System.out.println("要刪除的節(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;
		}
	}
}

雙向鏈表:

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

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

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

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

節(jié)點(diǎn)類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 + '}';
	}
}

雙向鏈表類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;
		//找到鏈表最后一個節(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)的前一個節(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)不為最后一個節(jié)點(diǎn)
				temp.next.pre = temp.pre;
			}
		} else {
			System.out.println("要刪除的節(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é)

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

相關(guān)文章

  • 如果淘寶的七天自動確認(rèn)收貨讓你設(shè)計(jì)你用Java怎么實(shí)現(xiàn)

    如果淘寶的七天自動確認(rèn)收貨讓你設(shè)計(jì)你用Java怎么實(shí)現(xiàn)

    在面試的時候如果面試官問淘寶的七天自動確認(rèn)收貨讓你設(shè)計(jì),你會怎么具體實(shí)現(xiàn)呢?跟著小編看一下下邊的實(shí)現(xiàn)過程,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值
    2021-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:插入排序 Insertion Sort

    Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:插入排序 Insertion Sort

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:插入排序 Insertion Sort,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06
  • SpringBoot 中 AutoConfiguration的使用方法

    SpringBoot 中 AutoConfiguration的使用方法

    這篇文章主要介紹了SpringBoot 中 AutoConfiguration的使用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • SpringBoot整合RabbitMQ實(shí)現(xiàn)交換機(jī)與隊(duì)列的綁定

    SpringBoot整合RabbitMQ實(shí)現(xiàn)交換機(jī)與隊(duì)列的綁定

    這篇文章將通過幾個實(shí)例為大家介紹一些SpringBoot中RabbitMQ如何綁定交換機(jī)(交換器)與隊(duì)列,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例解析

    SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例解析

    這篇文章主要介紹了SpringCloud基于RestTemplate微服務(wù)項(xiàng)目案例,在寫SpringCloud搭建微服務(wù)之前,先搭建一個不通過springcloud只通過SpringBoot和Mybatis進(jìn)行模塊之間通訊,通過一個案例給大家詳細(xì)說明,需要的朋友可以參考下
    2022-05-05
  • SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)全過程

    SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)全過程

    Spring Security是一個功能強(qiáng)大且高度可定制的身份驗(yàn)證和授權(quán)框架,專門用于保護(hù)Java應(yīng)用程序的Web集成,下面這篇文章主要給大家介紹了關(guān)于SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Java提效神器Stream的一些冷門技巧匯總

    Java提效神器Stream的一些冷門技巧匯總

    這篇文章主要給大家介紹了關(guān)于Java提效神器Stream的一些冷門技巧,Stream是java對集合操作的優(yōu)化,相較于迭代器,使用Stream的速度非???并且它支持并行方式處理集合中的數(shù)據(jù),默認(rèn)情況能充分利用cpu的資源,需要的朋友可以參考下
    2021-07-07
  • 迅速學(xué)會@ConfigurationProperties的使用操作

    迅速學(xué)會@ConfigurationProperties的使用操作

    這篇文章主要介紹了迅速學(xué)會@ConfigurationProperties的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java的關(guān)鍵字之transient詳解

    Java的關(guān)鍵字之transient詳解

    這篇文章主要介紹了Java的關(guān)鍵字之transient詳解,在Java編程中,transient是一個關(guān)鍵字,通常用于修飾變量,它的主要作用是用于指示JVM在對象序列化時忽略指定變量,從而避免數(shù)據(jù)泄露的安全問題,需要的朋友可以參考下
    2023-09-09
  • java網(wǎng)上圖書商城(6)訂單模塊1

    java網(wǎng)上圖書商城(6)訂單模塊1

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)上圖書商城,訂單模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

中阳县| 东源县| 涟水县| 龙海市| 清水河县| 寿阳县| 达孜县| 兴化市| 荔波县| 高密市| 尤溪县| 神木县| 兖州市| 正宁县| 柳江县| 门源| 巴中市| 锡林郭勒盟| 公主岭市| 新乐市| 乐清市| 凤冈县| 日土县| 古田县| 永州市| 盐边县| 息烽县| 眉山市| 盐源县| 盐津县| 麟游县| 湘西| 天津市| 黑河市| 依安县| 拜泉县| 南皮县| 黔南| 北辰区| 略阳县| 贵港市|