java實現單鏈表
阿新 • • 發佈:2022-03-26
java實現單鏈表
簡單插入與展示
package com.algorithm.demo4; public class LinkedListDemo { public static void main(String[] args) { Node user01 = new Node(1, "user01"); Node user02 = new Node(2, "user02"); Node user03 = new Node(3, "user03"); SingleLinkedList singleLinkedList = new SingleLinkedList(); singleLinkedList.add(user01); singleLinkedList.add(user02); singleLinkedList.add(user03); singleLinkedList.show(); } } class SingleLinkedList { private Node head = new Node(0, "head"); public void add(Node node) { Node tem = head; // 遍歷連結串列 while (true) { // 走到最後 if (tem.getNext() == null) { break; } // tem後移 tem = tem.getNext(); } // 出迴圈後tem就指向最後的節點 tem.setNext(node); } public void show() { if (isEmpty()) { System.out.println("空的"); return; } Node tem = head.getNext(); while (true) { // 如果到最後了 if (tem == null) { break; } // 輸出 System.out.println(tem); // tem後移 tem = tem.getNext(); } } public boolean isEmpty() { return head.getNext() == null; } } class Node { private int id; private String name; private Node next; @Override public String toString() { return "Node{" + "id=" + id + ", name='" + name + '\'' + ", next=" + next + '}'; } public Node(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
按id順序插入
public void addByOrder(Node node) { Node tem = head; int id = node.getId(); if (id == tem.getId()) { System.out.println("編號已存在"); return; } // 遍歷連結串列 while (true) { // 如果走到最後 if (tem.getNext() == null) { break; } // 如果tem後一個的id大於node的id,說明node任然在tem左邊 // 如果tem的id小於node的id,說明node在tem右邊 // 都符合時說明在兩節點之間 if ((tem.getNext().getId() > node.getId()) && (tem.getId() < node.getId())) { break; } // tem右移 tem = tem.getNext(); } // 插入 if (tem.getNext() != null) { node.setNext(tem.getNext()); } tem.setNext(node); }
修改和刪除
public void delete(Node node) { if (head.getNext() == null) { System.out.println("連結串列空的"); return; } Node tem = head; boolean flag = false; int id = node.getId(); while (true) { if (tem.getNext() == null) { break; } if (tem.getNext().getId() == id){ flag = true; break; } // tem 右移 tem = tem.getNext(); } // 根據flag判斷 if (flag) { // 刪除 tem.setNext(tem.getNext().getNext()); node.setNext(null); }else { System.out.println("找不到"); } } public void update(Node node) { if (head.getNext() == null) { System.out.println("連結串列空的"); return; } Node tem = head.getNext(); boolean flag = false; int id = node.getId(); while (true) { if (tem == null) { break; } if (id == tem.getId()) { flag = true; break; } // tem右移 tem = tem.getNext(); } // 根據flag判斷 if (flag) { // 修改 tem.setId(node.getId()); tem.setName(node.getName()); }else { System.out.println("找不到"); } }