链表的操作

package ShuJuJieGou;

public class linkedList {
    //单向链表  整体
    private Node head;//头指针


    private static class Node {
        //节点类
        int value;//值
        Node next;//下一个结点指针

        public Node(int value, Node next) {
            this.value = value;
            this.next = next;
        }
    }

    //添加头节点
    public void addFirst(int value) {
        //1.链表为空
//        head = new Node(value, null);
        //2.非空
        head = new Node(value, head);
    }

    //找到尾节点
    private Node findLast() {
        if (head == null) {//空链表
            return null;
        }
        Node p;
        for (p = head; p.next != null; p = p.next) {

        }
        return p;
    }

    //添加尾节点
    public void addLast(int value) {
        Node last = findLast();
        if (last == null) {
            addFirst(value);
            return;
        }
        last.next = new Node(value, null);
    }

    //遍历链表
    //while循环
    public void loop1() {
        Node p = head;
        while (p.next != null) {
            System.out.println(p.value);
            p = p.next;
        }
    }

    //for循环
    public void loop2() {
        for (Node p = head; p != null; p = p.next) {
            System.out.println(p.value);
        }
    }

    //测试索引
/*    public void test(){
        int i=0;
        for (Node p=head;p!=null;p=p.next,i++){
            System.out.println(p.value+","+i);
        }
    }*/

    //根据给定索引位置,找到节点
    //返回节点
    private Node findNode(int index) {
        int i = 0;
        for (Node p = head; p != null; p = p.next, i++) {
            if (i == index) {
                return p;
            }
        }
        return null;//没找到
    }

    //找到节点值
    public int get(int index) {
        Node node = findNode(index);
        if (node == null) {
            //抛出异常
            throw new IllegalArgumentException(String.format("inde[%d]值不合法%n", index));
        }
        return node.value;
    }

    //向索引位置插入
    public void insert(int index, int value) {
        Node prev = findNode(index - 1);//找到上一个节点
        if (index == 0) {
            addFirst(index);
            return;
        }
        if (prev == null) {
            //找不到
            illegalIndex(index);
        }
        prev.next = new Node(value, prev.next);
    }

    //抛出异常
    private static void illegalIndex(int index) {
        throw new IllegalArgumentException(String.format("index[%d] 不合法%n", index));
    }

    //删除节点
    public void removeFirst() {
        if (head == null) {
            illegalIndex(0);
        }
        head = head.next;
    }

    //按索引删除
    public void remove(int index) {
        if (index == 0) {
            //删除头节点
            removeFirst();
        }
        Node prev = findNode(index - 1);
        if (prev == null) {//空链表
            illegalIndex(index);
        }
        Node removed = prev.next;
        if (removed == null) {//只有一个节点
            illegalIndex(index);
        }
        prev.next = removed.next;
    }
}


你可能感兴趣的:(链表,数据结构,java)