java单链表增删改查(无头结点)

内部

class LinkedNode {
    public int data;
    public LinkedNode next = null;
}

public class LinkedList {
    private LinkedNode head = null;

    public void addFirst ( int data) {
        //头插法
        LinkedNode node = new LinkedNode();
        node.data = data;
        if (head == null){
            head = node;
            return;
        } else {
            node.next = head;
            head = node;
        }
    }

    public void addLast (int data) {
        //尾插
        LinkedNode node = new LinkedNode();
        node.data = data;
        if (head == null) {
            head = node;
            return;
        }
        LinkedNode cur = head;
        while (cur.next != null) {
            cur = cur.next;
        }
        cur.next = node;
    }

    public void addIndex (int index, int data) {
        //在index处插入
        if ( index < 0 || index > size()) {
            return;
        }
        if (index == 0) {
            addFirst(data);
            return;
        }
        if ( index == size()) {
            addLast(data);
            return;
        }
        LinkedNode node = new LinkedNode();
        node.data = data;
        //找到index位置节点的前一个节点pre
        LinkedNode pre = getIndexPos (index - 1);
        node.next = pre.next;
        pre.next = node;
    }

    public LinkedNode getIndexPos (int index) {
        LinkedNode cur = head;
        for (int i = 0; i < index; i++){
            cur = cur.next;
        }
        return cur;
    }

    public boolean contains (int key) {
        for (LinkedNode cur = head; cur != null; cur = cur.next){
            if (cur.data == key){
                return true;
            }
        }
        return false;
    }

    public int size () {
        int size = 0;
        for (LinkedNode node = head; node != null; node = node.next){
            size++;
        }
        return size;
    }

    public void remove (int toRemove) {
        //处理空链表
        if (head == null){
            return;
        }
        //判断是不是为头节点
        if (head.data == toRemove) {
            head = head.next;
            return;
        }
        //中间节点,找到前一个节点pre
        LinkedNode pre = getPrePos (toRemove);
        if (pre != null){
            pre.next = pre.next.next;
        } else {
            System.out.println("删除失败,无此数据");
            return;
        }
    }
    public void removeAll (int toRemove) {
        if (head == null){
            return;
        }
        while (getPrePos(toRemove) != null) {
            remove(toRemove);
        }
    }
    private LinkedNode getPrePos (int toRemove) {
        for (LinkedNode node = head; node.next != null; node = node.next) {
            if ( toRemove == node.next.data) {
                return node;
            }
        }
        return null;
    }
    public void display () {
        //打印链表
        System.out.print("[");
        for ( LinkedNode node = head; node != null; node = node.next) {
            System.out.print(node.data);
            if (node.next != null) {
                System.out.print("," + " ");
            }
        }
        System.out.println("]");
    }

    public void clear () {
        head = null;
    }
}

主函数及部分测试.

public class TestLinkedList {
    public static void main(String[] args) {
        //testAddFirst();
        //testAddLast();
        //testAddIndex();
        //testRemove();
        //testContains();
        //testRemoveAll();
        testClear();
    }
    public static void testAddFirst () {
        LinkedList list = new LinkedList();
        list.addFirst(1);
        list.addFirst(2);
        list.addFirst(3);
        list.addFirst(4);
        list.display();
    }

    public static void testAddLast () {
        LinkedList list = new LinkedList();
        list.addLast(1);
        list.addLast(2);
        list.addLast(3);
        list.addLast(4);
        list.display();
        System.out.println(list.size());
    }

    public static void testAddIndex () {
        LinkedList list = new LinkedList();
        list.addLast(1);
        list.addLast(2);
        list.addLast(3);
        list.addLast(4);
        list.getIndexPos(1);
        list.display();
        list.addIndex(2,5);
        list.display();
    }
    public static void testRemove () {
        LinkedList list = new LinkedList();
        list.addLast(1);
        list.addLast(2);
        list.addLast(3);
        list.addLast(4);
        list.display();
        list.remove(0);
        list.display();
    }

    public static void testContains () {
        LinkedList list = new LinkedList();
        list.addFirst(1);
        list.addFirst(2);
        list.addFirst(3);
        list.addFirst(4);
        System.out.println(list.contains(0));
        list.display();
    }
    public static void testRemoveAll () {
        LinkedList list = new LinkedList();
        list.addFirst(4);
        list.addFirst(1);
        list.addFirst(2);
        list.addFirst(3);
        list.addFirst(4);
        list.addFirst(4);
        list.addFirst(4);
        list.addFirst(4);
        list.display();
        list.removeAll(4);
        list.display();
    }
    public static void testClear () {
        LinkedList list = new LinkedList();
        list.addFirst(1);
        list.addFirst(2);
        list.addFirst(3);
        list.addFirst(4);
        list.display();
        list.clear();
        list.display();
    }
}

萌新写java
有缘人看到错误请指出!感激万分!

发布了21 篇原创文章 · 获赞 9 · 访问量 564

猜你喜欢

转载自blog.csdn.net/weixin_45328602/article/details/101320668