1. 程式人生 > 其它 >java實現單鏈表

java實現單鏈表

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("找不到");
    }
}