1. 程式人生 > 實用技巧 >java實現單鏈表的增刪改以及排序

java實現單鏈表的增刪改以及排序

使用java程式碼模擬單鏈表的增刪改以及排序功能

程式碼如下:

package com.seizedays.linked_list;

public class SingleLinkedListDemo {
//  主方法
    public static void main(String[] args) {
        HeroNode node1 = new HeroNode(1, "宋江", "及時雨");
        HeroNode node2 = new HeroNode(2, "盧俊義", "玉麒麟");
        HeroNode node3 = new HeroNode(3, "吳用
", "智多星"); HeroNode node4 = new HeroNode(4, "林沖", "豹子頭"); HeroNode node5 = new HeroNode(3, "李逵", "黑旋風"); SingleLinkedList list = new SingleLinkedList(); // list.add(node1); // list.add(node2); // list.add(node3); list.addByOrder(node1); list.addByOrder(node3); // list.addByOrder(node5);
list.update(node5); list.addByOrder(node2); list.addByOrder(node4); list.delete(5); list.showList(); } } //定義SingleLinkedList管理結點 class SingleLinkedList { //先初始化一個頭節點,頭節點不動 不存放資料 private HeroNode head = new HeroNode(0, "", ""); //1.新增節點到單向列表 // 不考慮編號順序時候 將最後節點的next指向新的節點
public void add(HeroNode heroNode) { //temp用於輔助遍歷 HeroNode temp = head; //找到最後 while (temp.next != null) { //找到連結串列的最後 跳出 temp = temp.next; } //當退出while迴圈時候 temp指向連結串列的最後 temp.next = heroNode; } // 2.按照編號大小有規律地將節點插入連結串列 public void addByOrder(HeroNode heroNode) { //通過輔助節點遍歷來找到新增的位置 HeroNode temp = head; while (temp.next != null) { if (heroNode.no == temp.next.no){ System.out.printf("編號%d已經存在,不能加入\n", heroNode.no); return; } if (heroNode.no < temp.next.no) { heroNode.next = temp.next; temp.next = heroNode; return; } temp = temp.next; } temp.next = heroNode; } //3.根據編號來修改節點的資訊 //根據newNode的no來修改節點 public void update(HeroNode newNode){ if (head.next == null){ System.out.println("連結串列為空"); return; } HeroNode temp = head; while (temp.next != null){ if (temp.next.no == newNode.no){ newNode.next = temp.next.next; temp.next = newNode; break; } temp = temp.next; } } //4.刪除節點 public void delete(int no){ if (head.next == null){ System.out.println("連結串列為空 刪除失敗"); return; } HeroNode temp = head; while (temp.next != null){ if (temp.next.no == no){ temp.next = temp.next.next; System.out.println("刪除完成"); return; } temp = temp.next; } System.out.println("沒有找到對應節點,刪除失敗"); } // 顯示連結串列 public void showList() { if (head.next == null) { System.out.println("連結串列為空"); return; } //head不能動 用輔助變數來遍歷 HeroNode temp = head.next; while (temp != null) { //輸出節點資訊 System.out.println(temp); //節點後移 temp = temp.next; } } } //定義頭結點 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; } @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + ", nickname='" + nickname + '\'' + '}'; } }