1. 程式人生 > >LinkedList底層簡化版實現

LinkedList底層簡化版實現

public class MyLinkedList {

    //MyLinkedList儲存資料個數
    int size;
    //首節點
    Node first;
    //尾節點
    Node last;

    //新增資料
    public boolean add(Object o) {
        Node node = new Node(last, o, null);
        //如果尾節點為空,即MyLinkedList沒有資料把新增的資料設定為首節點否則把已有的尾節點的next指向該資料
        if (last == null) {
            first = node;
        } else
{ last.next = node; } //新新增的資料設定為節點之後,把該節點設定為尾節點 last = node; //長度++ size++; return true; } //刪除資料 public Object remove(int index) { //通過下標獲得要刪除節點獲取其中資料,值、前一個節點、後一個節點 Node node = node(index); Object value = node.value
; Node pro = node.pro; Node next = node.next; //驗證下標合法性 if (index >= 0 && index < size) { //如果該節點沒有前一個節點,即該節點為首節點,將該節點的下一個節點設定為首節點 if (pro == null) { next.pro = null; node.next = null; first = next; } //如果該節點沒有下一個節點,即該節點為為節點,將該節點的上一個節點設定為尾節點
else if (next == null) { pro.next = null; node.pro = null; last = pro; } //如果該節點既不是首節點也不是尾節點,將該節點的上一個節點的next指向該節點的下一個節點,將該節點的下一個節點的pro指向該節點的上一個節點 else{ pro.next = next; next.pro = pro; } //最後將該節點置空,長度減一 node = null; size--; } else { System.out.println("不存在該序號元素"); } return value; } //修改 public void set(int index, Object o) { if (index >= 0 && index < size) { Node node = node(index); node.value = o; }else { System.out.println("不存在該序號元素"); } } public Object get(int index){ return node(index).value; } //查詢 public Node node(int index) { //當查詢的下標小於長度一半時從尾部從頭部遍歷,否則從尾部遍歷 if (index < (size >> 1)) { Node x = first; for (int i = 0; i < index; i++) { x = x.next; } return x; } else { Node x = last; for (int i = size - 1; i > index; i--) { x = x.pro; } return x; } } class Node { Object value; Node pro; Node next; public Node(Node pro, Object value, Node next) { super(); this.value = value; this.pro = pro; this.next = next; } } }