zys-coder
2/29/2020 - 3:20 PM

linkedList

linkedLIst的手写源码

public class MyLinkedList {

    //建立一个叫first的节点,first表示当前节点的第一个节点
    private Node first = null;
    //建立一个叫last的节点,last表示当前节点
    private Node last = null;
    private int size = 0 ;


    public void add(Object obj){
        Node n = new Node();
        if(first==null){
            n.setPrevious(null);
            n.setNext(null);
            n.setObj(obj);
            //将第一个节点赋给first和last
            first=n;
            last=n;
        }else{
            n.setPrevious(last);
            n.setNext(null);
            n.setObj(obj);
            //将上一个节点的last设置为n
            last.setNext(n);
            last=n;
        }
        size++;
    }

    public Node node(int index){
        Node temp = null;
        //把第一个节点赋值给temp
        if(first!=null){
            temp=first;
        }
        //遍历节点,把第index个节点赋值给temp
        for (int i = 0; i < index; i++) {
            temp = temp.next;
        }
        return temp;


    }

    public void add(int index,Object obj){
        Node temp = node(index);
        Node newNode = new Node();
        newNode.setObj(obj);
        if (temp!=null){
            //把newNode插进集合中
            //修改newNode,使得新节点的前一个为temp节点前面的节点
            newNode.setPrevious(temp.getPrevious());
            //修改temp前面一个节点,使得next中的节点为newNode
            temp.getPrevious().setNext(newNode);
            //修改newNode,把temp插到newnode后面
            newNode.setNext(temp);
            temp.setPrevious(newNode);
        }
        size++;
    }
    public int size(){
        return size;
    }

    //获取第index个节点
    public Object get(int index){
        //检查越界异常
        rangeCheck(index);
           Node temp =node(index);
           if(temp!=null){
               return temp.getObj();
           }
          return null;
    }

    public void remove(int index){
        Node temp = node(index);
        if(temp!=null){
            //将temp后面节点的previous设置为temp前面一个节点
            temp.getNext().setPrevious(temp.getPrevious());
            temp.getPrevious().setNext(temp.getNext());
            size--;
        }

    }

    private void rangeCheck(int index){
        if(index<0||index>=size){
            try {
                throw new Exception();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
//        MyLinkedList list = new MyLinkedList();
//        list.add("你好");
//        list.add("哦哦");
//        list.add("java");
//        list.add("谢谢");
//        list.remove(1);
//        list.add(1,"再见啊");
//        list.add(2,"开心呢");
//        System.out.println(list.size());
//        System.out.println(list.get(1));
//        System.out.println(list.get(2));
//        StringBuffer stringBuffer =new StringBuffer(null);
        StringBuilder stringBuilder = new StringBuilder(null);
        System.out.println(stringBuilder);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MyLinkedList that = (MyLinkedList) o;
        return size == that.size &&
                Objects.equals(first, that.first) &&
                Objects.equals(last, that.last);
    }

    @Override
    public int hashCode() {
        return Objects.hash(first, last, size);
    }

}

package MyLinkedList;

/**
 * @author 张育松
 * @date 2020/2/25 - 19:54
 * @description
 */
public class Node {

    Object obj;
    Node previous;
    Node next;

    public Node() {
    }

    public Node(Object obj, Node previous, Node next) {
        this.obj = obj;
        this.previous = previous;
        this.next = next;
    }

    public void setObj(Object obj) {
        this.obj = obj;
    }

    public void setPrevious(Node previous) {
        this.previous = previous;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public Object getObj() {
        return obj;
    }

    public Node getPrevious() {
        return previous;
    }

    public Node getNext() {
        return next;
    }
}