06-單向鏈表

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();
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章