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

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

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

單鏈表:

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

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

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

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

實現(xiàn)思路:

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

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

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

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

代碼實現(xiàn):

節(jié)點類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é)點
	public SingleNode getHead(){
		return head;
	}
	//添加節(jié)點
	public void add(SingleNode singleNode) {
		SingleNode temp = head;
		//找到鏈表最后一個節(jié)點
		while (temp.next != null) {
			temp = temp.next;
		}
		temp.next = singleNode;
	}
	//按順序添加節(jié)點
	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é)點
	public void delete(int data) {
		SingleNode temp = head;
		boolean flag = false;    //標志是否找到待刪除節(jié)點的前一個節(jié)點
		while (true) {
			if (temp.next == null) {
				//已經(jīng)遍歷到鏈表最后了
				break;
			} else if (temp.next.data == data) {
				//找到待刪除節(jié)點的前一個節(jié)點
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if (flag) {
			temp.next = temp.next.next;
		} else {
			System.out.println("要刪除的節(jié)點不存在");
		}
	}
	//輸出鏈表
	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é)點中除了保存了指向后一個節(jié)點的指針外,還保存了指向前一個節(jié)點的指針

實現(xiàn)思路:

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

代碼實現(xiàn):

節(jié)點類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é)點
	public DoubleNode getHead() {
		return head;
	}
	//添加節(jié)點
	public void add(DoubleNode doubleNode) {
		DoubleNode temp = head;
		//找到鏈表最后一個節(jié)點
		while (temp.next != null) {
			temp = temp.next;
		}
		temp.next = doubleNode;
		doubleNode.pre = temp;
	}
	//刪除節(jié)點
	public void delete(int data) {
		DoubleNode temp = head.next;
		boolean flag = false;    //標志是否找到待刪除節(jié)點的前一個節(jié)點
		while (true) {
			if (temp == null) {
				//已經(jīng)遍歷到鏈表最后了
				break;
			} else if (temp.data == data) {
				//找到待刪除節(jié)點
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if (flag) {
			temp.pre.next = temp.next;
			if (temp.next != null) {
				//若刪除節(jié)點不為最后一個節(jié)點
				temp.next.pre = temp.pre;
			}
		} else {
			System.out.println("要刪除的節(jié)點不存在");
		}
	}
	//輸出鏈表
	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)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    全面匯總SpringBoot和SpringClould常用注解

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

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

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

    springSecurity用戶認證和授權(quán)的實現(xiàn)

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

    簡單工廠模式_動力節(jié)點Java學院整理

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

最新評論