a.特點:
1.鏈表是以節點方式來存儲的,
2.每個節點包含data域,next域:指向下一個節點
3.鏈表的各個節點不一定是連續存放
4.鏈表分帶頭結點的鏈表和不帶頭結點的鏈表
b.內存中實際結構圖:
c.邏輯結構圖:
d.單鏈表實現思路:
創建一個存儲空間:
代碼實現:
package LinkedList; public class OrderlyList { public int sum; public String name; public String nickName; public OrderlyList orderlyList; public OrderlyList(int sum,String name,String nickName) { this.sum=sum; this.name=name; this.nickName=nickName; } @Override public String toString() { return "number:"+sum+" name:"+name+" nickName:"+nickName; } }
添加時:
方法一: 直接添加到鏈表尾部(不推薦)
-
-
- 先創建一個head頭結點,作用就是表示單鏈表的頭
- 后面每添加一個節點,就直接加入到鏈表的最后
-
(1) 先定義一個頭結點,頭結點不能動,不存放具體的數據
(2) 添加節點到單向鏈表
1> 找到當前鏈表的最后節點
2> 將最后這個節點的next 指向新的節點
3>通過一個輔助遍歷,幫忙遍歷整個鏈表
代碼實現:
1 class Init{ 2 //初始化 3 OrderlyList head = new OrderlyList(0,"",""); 4 public void add(OrderlyList record) { 5 //初始化一個臨時變量 6 OrderlyList temp = head; 7 while (true) { 8 //判斷是否到達最后一個位置 9 if (temp.orderlyList == null) { 10 temp.orderlyList = record; 11 break; 12 } 13 temp = temp.orderlyList; 14 } 15 } 16 public void show() { 17 OrderlyList temp = head.orderlyList; 18 while (true) { 19 if (head.orderlyList==null) { 20 System.out.println("是空的"); 21 return; 22 } 23 if (temp==null) { 24 return; 25 } 26 System.out.println(temp); 27 temp = temp.orderlyList; 28 29 } 30 } 31 }
方法二: 根據編號插入鏈表,如果有則添加失敗並給出提示
圖解:
-
-
- 找到新添加節點的位置,是通過輔助變量
- 讓新的節點.orderlyList= temp.orderlyList
- temp.orderlyLis = 新的節點
-
代碼實現:
void add(OrderlyList orderlyList) { OrderlyList temp = orderly; boolean flag = false; while (true) { if (temp.orderlyList == null) { break; } if (temp.orderlyList.sum > orderlyList.sum) { break; } if (temp.orderlyList.sum == orderlyList.sum) { flag = true; } temp = temp.orderlyList; } if (!flag) { orderlyList.orderlyList = temp.orderlyList; temp.orderlyList = orderlyList; } else { System.out.println("已經存在"); } }
修改時:
根據編號來修改,但編號不能更改,否則相當與添加
代碼實現:
// 修改 void update(OrderlyList list) { OrderlyList temp = orderly.orderlyList; boolean flag = false; while (true) { if (temp == null) { break; } if (temp.orderlyList.sum == list.sum) { flag = true; break; } temp = temp.orderlyList; } if (flag) { temp.orderlyList.name = list.name; temp.orderlyList.nickName = list.nickName; temp.orderlyList.orderlyList =list.orderlyList; } }
刪除時:
圖解:
代碼實現:
// 刪除 void delect(int sum) { OrderlyList temp = orderly.orderlyList; boolean flag = false; while (true) { if (temp == null) { break; } if (temp.orderlyList.sum == sum) { flag = true; break; } if (temp.orderlyList.sum > sum) { break; } temp = temp.orderlyList; } if (flag) { temp.orderlyList = temp.orderlyList.orderlyList; } }
-
- 找到需要刪除的節點的前一個節點
- temp.orderlyList = temp.orderlyList.orderlyList;
- 被刪除的節點會因為沒有指向從而會被垃圾回收機制回收;