Java自身实现LinkedList

要实现LinkedList,首先理解LinkedList的底层数据结构是链表,直白的说是一个双向链表,双向链表本身前继域和后继域还有数据本身所在区域。

Node类:

/**
  * 定义节点
  */
public class Node {
    Node previous;        //前继,指向前一个Node
    Object data;          //节点数据
    Node next;            //后继,指向后一个Node
   /**
    * 无参构造方法
    */ 
    public Node() {
    }
    /**
     * 有参构造方法
     */ 
    public Node(Node previous, Object data, Node next) {
        super();
        this.previous = previous;
        this.data = data;
        this.next = next;
    } 
  /**
    * 前继
    */ 
    public Node getPrevious() {
        return previous;
    }

    public void setPrevious(Node previous) {
         this.previous = previous;
    }
  /**
    * 数据
    */ 
     public Object getData() {
         return data;
     }

     public void setData(Object data) {
         this.data = data;
     }
  /**
    * 后继
    */ 
     public Node getNext() {
         return next;
     }

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

MyLinkedList类:

  public class MyLinkedList {
        private Node first;          //首节点
        private Node last;           //尾节点
        private int size;            //链表长度
/**
  * 初始化MyLinkedList
  */
        public MyLinkedList() {
            first = null;
            last = null;
            size = 0;
        }
 /**
   * 添加数据
   */  
    public void add(Object obj) {
                 Node n = new Node();
        if (first == null) { //当first=null则说明LinkedList中没有一个节点
                     n.setNext(null);
                     n.setData(obj);
                     n.setPrevious(null);
                     first = n;
                     last = n;        //第一个节点和最后一个节点都是node
                 } else {
                     n.setPrevious(last);
                     n.setData(obj);
                     n.setNext(null);
                     last.setNext(n);     //当前节点变为末尾节点
                     last = n;
                 }
                 size++;
             }


        public int size() {
             return size;
         }
/**
   * get方法
   */  
         public Object get(int index) {
             Node temp = null;
            if (first != null) {
                 temp = first;
                 for (int i = 0; i < index; i++) {
                     temp = temp.next;
                 }
             }
             return temp.data;
         }
 /**
   * 删除数据
   */  
         public boolean remove(Object obj) {
             Node node = first;
             if(obj==null){
                 while(node!=null){
                     if(node.data==null){
                         removefast(node);
                         return true;
                     }
                     node = node.next;
                 }
             }else {
                 while(node!=null){
                     if(obj.equals(node.data)){
                         removefast(node);
                         return true;
                     }
                     node = node.next;
                 }
             }
             return false;
         }

         private void removefast(Node node){
             node.previous.next=node.next;
             size--;
             node.data=null;
             node.previous = node.next = null;
         }   
 /**
   * set方法
   */   
         public Object set(int index,Object obj) {
             Node node = get(index);
             Object oldObject=node.data;
             node.data = obj;
             return oldObject;
         }
 /**
   * 打印list数据
   */   
        public void show() {
                for (int i = 0; i < size() ; i++) {
                    System.out.print(get(i)+" ");
                }
                System.out.println();
            }
         public static void main(String[] args) {
             MyLinkedList list = new MyLinkedList();
             list.add("a");
             list.add("b");
             list.add("c");
             list.add("d");
             list.remove("c");
             System.out.println(list.get(2));
             list.show();
         }
       }

猜你喜欢

转载自blog.csdn.net/qq_41930448/article/details/81119492
今日推荐