Java单链表实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34579060/article/details/83578212
package com.datastruct;

public class ListNode {

    Node head;
    int length;

    // 单链表长度
    public int size() {
        return length;
    }

    // 头插法
    public void addNodeHead(Node node) {
       node.next = head;
       head = node;
       length++;
    }

    // 尾插法
    public void addNodeTail(Node node) {
        // 也可以使用长度来判断
        if (head == null) {
            head = node;
        } else {
            Node n = head;
            while (n.next != null) {
                n = n.next;
            }
            n.next = node;
        }
        length++;
    }

    // 在指定位置上插入节点
    public void addNode(int index, Node node) {
        if (index < 0 || index > length) {
            throw new IllegalArgumentException();
        }
        Node n = head;
        Node previous = head;
        int pos = 0;
        while (pos != index) {
            previous = n;
            n = n.next;
            pos++;
        }
        if (n == head) {
            node.next = head;
            head = node;
        } else {
            node.next = n;
            previous.next = node;
        }
        length++;
    }
    // 查找指定位置节点
    public Node findNodeByIndex(int index) {
        Node n = head;
        int pos = 0;
        while (pos != index) {
            n = n.next;
            pos++;
        }
        return n;
    }
    // 获得所有节点
    public void getAllNodes() {
        Node n = head;
        StringBuilder sb = new StringBuilder();
        while (n != null) {
            sb.append(n.data).append(" ");
            n = n.next;
        }
        System.out.println(sb.toString());
    }

     // 删除指定位置节点
    public void delNodeByIndex(int index) {
        if (index < 0 || index > length) {
            throw new IllegalArgumentException();
        }
        Node n = head;
        Node previous = head;
        int pos = 0;
        while (pos != index) {
            previous = n;
            n = n.next;
            pos++;
        }
        if (n == head) {
            head = head.next;
        } else {
            previous.next = n.next;
        }
        length--;
    }    
   
    // 清空单链表
    public void clear() {
        length = 0;
        head = null;
    }
}

package com.datastruct;

public class Node {

    int data;
    Node next;

    public Node(int data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return  "data=" + data ;
    }
}

class TestLinked1 {
    public static void main(String[] args) {
        ListNode list = new ListNode();
        list.addNodeTail(new Node(1));
        list.addNodeTail(new Node(2));
        list.addNodeTail(new Node(3));
        list.addNodeTail(new Node(4));

        // 查找指定节点
        list.getAllNodes();
        Node node = list.findNodeByIndex(0);
        System.out.println(node.data);

        // 头插法
        //list.addNodeHead(new Node(7));

        // 指定位置插入节点
        list.getAllNodes();
        list.addNode(4,new Node(8));
        list.getAllNodes();

        list.delNodeByIndex(4);
        list.getAllNodes();

        list.clear();
        list.getAllNodes();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34579060/article/details/83578212