1,鏈表是以節點的方式來存儲的;
2,每個節點包含data域、next域:指向下一個節點;
3,鏈表的每個節點不一定是連續的;
4,鏈表分帶頭節點的鏈表,和不帶頭節點的鏈表,根據實際情況來決定。
帶頭節點的單向鏈表
頭節點
1,存放具體數據
2,作用就是作爲單鏈表的頭
帶頭節點的單鏈表
添加(創建)
1,先創建一個頭結點
2,添加其他節點,直接加入到鏈表的最後
package com.datastack.linkedlist; public class SimpleLinkedList { public HeroNode head = new HeroNode(0,"","");//頭結點 /** * 添加方法:不考慮順序添加 * 1,找到最後節點 * 2,將最後節點的next指向 新的節點 * @param heroNode */ public void add(HeroNode heroNode){ HeroNode temp = head; while(true){ if(temp.next == null){ break; } temp = temp.next; } temp.next = heroNode; } /** * 按編號從小到大順序添加 * @param heroNode */ public void addByOrder(HeroNode heroNode){ HeroNode temp = head; boolean flag = false;//標識添加的編號是否存在 while(true){ if(temp.next == null){ break; } if(temp.next.no > heroNode.no){ break; }else if(temp.next.no == heroNode.no){ flag = true; break; } temp = temp.next; } if(flag){ System.out.printf("準備插入的英雄的編號 %d 已存在,不能添加\n",heroNode.no); }else{ heroNode.next = temp.next; temp.next = heroNode; } } /** * 顯示鏈表 */ public void list(){ //判斷鏈表是否爲空 if(head.next == null){ System.out.println("鏈表爲空"); return; } HeroNode temp = head.next; while(true){ if(temp == null){ break; } System.out.println(temp); temp = temp.next; } } /** * 修改 * @param heroNode */ public void update(HeroNode heroNode){ HeroNode temp = head.next; boolean flag = false;//表示是否找到該節點 while(true){ if(temp == null){ break; } if(temp.no == heroNode.no){ flag = true; break; } temp = temp.next; } if(flag){ temp.name = heroNode.name; temp.nickname = heroNode.nickname; }else{ System.out.println("沒有找到要修改的編號"); } } /** * 刪除 * @param heroNode */ public void delete(int no){ HeroNode temp = head; boolean flag = false;//是否找到要刪除的節點 while(true){ if(temp.next == null){ break; } if(temp.next.no == no){ flag = true; break; } temp = temp.next; } if(flag){ temp.next = temp.next.next; }else{ System.out.println("沒有找到要刪除的節點"); } } }
package com.datastack.linkedlist; public class HeroNode { public int no; public String name; public String nickname;//暱稱 public HeroNode next;//下一個節點 //構造器 public HeroNode(int no,String name,String nickname){ this.no = no; this.name = name; this.nickname = nickname; } //打印 public String toString(){ return "HeroNode [no="+no+",name="+name+",nickname="+nickname+"]"; } }
package com.datastack.linkedlist; public class SimpleLinkedListDemo { public static void main(String[] args) { HeroNode hero1 = new HeroNode(1, "宋江", "及時雨"); HeroNode hero3 = new HeroNode(3, "吳用", "智多星"); HeroNode hero2 = new HeroNode(2, "盧俊義", "王麒麟"); HeroNode hero4 = new HeroNode(4, "林沖", "爆炸頭"); SimpleLinkedList linkedList = new SimpleLinkedList(); linkedList.addByOrder(hero1); linkedList.addByOrder(hero4); linkedList.addByOrder(hero2); linkedList.addByOrder(hero3); linkedList.list(); HeroNode heroNode = new HeroNode(2, "wuyong", "wy"); linkedList.update(heroNode); System.out.println("修改後"); linkedList.list(); System.out.println("刪除後"); linkedList.delete(1); linkedList.list(); System.out.println("刪除後"); linkedList.delete(4); linkedList.list(); } }