手写链表

package Method;

import org.omg.Messaging.SYNC_WITH_TRANSPORT;
import serial.MyBaseBean;

/**
 * Created by joyce on 2019/10/25.
 */
public class MyLink<T> {

    private MyNode<T> firstNode;
    private MyNode<T> lastNode;
    private Integer length = 0;

    public String toString() {
        MyNode<T> node = firstNode;
        if(node == null)
            System.out.println(node);
        while (node != null) {
            System.out.println(node.getT());
            node = node.nextNode;
        }
        return null;
    }

    public T get(int index) {
        if(index >= length)
            throw new RuntimeException();

        MyNode<T> node = firstNode;
        for(int j=0; j<index; ++j) {
            node = node.nextNode;
        }

        return node.getT();
    }

    public static void main(String [] f) {
        MyLink<Integer> myLink = new MyLink<>();
        myLink.add(1);
        myLink.add(2);
        myLink.add(3);
        myLink.add(4);
        myLink.toString();
        // 删尾
        myLink.remove(3);
        myLink.toString();
        // 删中间
        myLink.remove(1);
        myLink.toString();
        // 删头节点
        myLink.remove(0);
        myLink.toString();
        // 删唯一节点
        myLink.remove(0);
        // 没节点
        myLink.toString();
        myLink.remove(0);
    }

    public void add(T t) {
        MyNode<T> node = new MyNode<T>(t);
        if(length == 0) {
            firstNode = lastNode = node;
        } else {
            lastNode.setNextNode(node);
            lastNode = node;
        }
        ++length;
    }

    public void remove(int index) {

        if(index >= length)
            throw new RuntimeException();

        if(length == 1) {
            firstNode = null;
            lastNode = null;
        } else if(index == 0) {
            firstNode = firstNode.nextNode;
        } else if(length - 1 == index) {
            MyNode<T> node = firstNode;
            for(int j=0; j<index -1; ++j) {
                node = node.nextNode;
            }
            lastNode = node;
            node.nextNode = null;
        } else {
            MyNode<T> node = firstNode;
            for(int j=0; j<index -1; ++j) {
                node = node.nextNode;
            }
            node.nextNode = node.nextNode.nextNode;

        }

        --length;
    }



    private static class MyNode<T> {
        private T t;
        private MyNode<T> nextNode;
        public MyNode(T t) {
            this.t = t;
        }

        public T getT() {
            return t;
        }

        public void setT(T t) {
            this.t = t;
        }

        public MyNode<T> getNextNode() {
            return nextNode;
        }

        public void setNextNode(MyNode<T> nextNode) {
            this.nextNode = nextNode;
        }
    }
}

 

输出:

1
2
3
4
1
2
3
1
3
3
null
java.lang.RuntimeException
at Method.MyLink.remove(MyLink.java:75)
at Method.MyLink.main(MyLink.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

posted on 2019-10-25 17:57  silyvin  阅读(199)  评论(0编辑  收藏  举报