1. 程式人生 > >Java數據結構之單鏈表

Java數據結構之單鏈表

java 數據結構 單鏈表

鏈表的組成:鏈表頭+結點

? ?鏈表頭一般只存儲下一個節點的引用

? ?節點:存數據+下一個節點的引用

  1. 鏈表頭代碼:

package?com.xingej.algorithm.datastructure.linkedList.singleLinkedList;

/**
?*?聲明一個鏈表的頭部
?*?
?*?從鏈表頭的使用,聯想到hadoop,spark,netty中都有上下文context
?*?
?*?@author?erjun?2017年12月8日?上午8:45:08
?*/
public?class?LinkList?{
????private?Node?first;

????public?LinkList()?{
????????//?初始鏈表時,指針引用為空
????????first?=?null;
????}

????public?void?insertFirst(int?iData,?double?dData)?{
????????//?創建一個新的鏈節點
????????Node?newLink?=?new?Node(iData,?dData);

????????//?更新新創建的鏈節點next引用,也就是將頭部引用,賦值給它
????????newLink.next?=?first;

????????//?更新鏈表頭部的引用,?也就是將新創建的鏈節點的引用,賦值給頭部引用
????????first?=?newLink;

????}

????public?boolean?isEmpty()?{
????????return?null?==?first;
????}

????public?Node?deleteFirst()?{
????????//?先緩存?被刪除的第一個元素
????????Node?temp?=?first;

????????//?鏈表,這種數據結構裏,刪除元素,只需要更新指針引用就可以了
????????//?更新頭部元素的引用
????????first?=?first.next;

????????return?temp;
????}

????public?void?displayList()?{
????????System.out.println("List?(first--->last):");

????????Node?current?=?first;

????????while?(null?!=?current)?{
????????????current.displayLink();

????????????//?獲取下一個元素的引用,?在C語言裏,稱為指針
????????????current?=?current.next;
????????}

????????System.out.println();
????}

}
  1. 節點代碼:

package?com.xingej.algorithm.datastructure.linkedList.singleLinkedList;

/**
?*?聲明一個節點
?*?
?*?@author?erjun?2017年12月8日?上午8:41:50
?*/
public?class?Node?{
????private?int?iData;

????private?double?dData;

????//?不是private?哦,不然對象訪問不了
????public?Node?next;

????public?Node(int?iData,?double?dData)?{
????????this.dData?=?dData;
????????this.iData?=?iData;
????}

????public?void?displayLink()?{
????????System.out.println("{"?+?iData?+?",?"?+?dData?+?"}");
????}
}



簡單測試用例:

package?com.xingej.algorithm.datastructure.linkedList.singleLinkedList;

import?org.junit.Test;

/**
?*?單鏈表測試
?*?
?*?@author?erjun?2017年12月8日?上午9:00:54
?*/
public?class?LinkListTest?{

????@Test
????public?void?test()?{
????????LinkList?list?=?new?LinkList();

????????//?很明顯,每次都是插入鏈表的第一個元素
????????list.insertFirst(32,?8);
????????list.insertFirst(3,?3);
????????list.insertFirst(2,?6);
????????list.insertFirst(42,?8);
????????list.insertFirst(26,?9);

????????list.displayList();
????}

}


技術分享圖片



技術分享圖片










Java數據結構之單鏈表