package com.yys.student; /** * Created by yys on 2017/5/6. */ public class SxtLinkedList { private Node first;//第一個對象 private Node last;//第二第三第...個對象 private int size;//list大小 /** * add(Object object)鏈表中添加一個對象 * 先判斷第一個對象是否爲空 * 如果是第一個對象爲空 添加到此節點 * 第一次添加時雙向鏈表的前一個指針指向是空 後一個指針指向也是空 * 是第一個元素也是最後一個元素 但元素本身不爲空 圖解爲(null,object,null) * else * 如果不是第一次添加 即代表第一個已有值然後不斷向後添加 * 假設此時往第二個位置添加 * 鏈表第二個的前一個指針位置應該是fist 圖解爲(null,object,first)(first,object,null) */ public void add(Object object){ Node node = new Node(); if(first==null){ node.setPrevious(null); node.setObj(object); node.setNext(null); first = node; last = node; }else{ node.setPrevious(last); node.setObj(object); node.setNext(null); last.setNext(node); last = node; } size++; } /** * get(int index)查找一個對象 * 先判斷下標是否越界 * 先判斷第一個對象是否爲空 * 如果是第一個對象不爲空 從此處遍歷查詢 */ public Object get(int index){ rangeCheck(index); Node temp = null; if(first!=null){ temp = first; for(int i=0;i<index;i++){ temp = temp.next; } } return temp.obj; } /** * get(int index)移除一個對象 * 先判斷下標是否越界 * 獲取下標位置節點 後取出此節點的上一個節點 和下一個節點 *刪除此節點就是將上一節點的尾鏈指向下一節點 下一節點首鏈向上一節點 * 下標-- */ public void remove(int index){ rangeCheck(index); Node temp = node(index); if(temp != null){ Node up = temp.previous; Node down = temp.next; up.next = down; down.previous = up; } size--; } /** * add(int index,Object obj)指定位置添加一個對象 * 先獲取下標位置節點 * new 一個新節點 * 判斷獲取下標位置節點是否爲空 * 如果不爲空 取出下標位置的上一節點 修改上一節點 (此時上一節點的下一節點是新加入節點) (新加入節點的上一節點是取出的上一節點) *新節點下一節點爲取出的下標節點 下標節點的上一節點是新加入節點 * 下標-- */ public void add(int index,Object obj){ Node temp = node(index); Node newNode = new Node(); newNode.obj = obj; if(temp != null){ Node up = temp.previous; up.next = newNode; newNode.previous = up; newNode.next = temp; temp.previous = newNode; size++; } } public Node node(int index){ Node temp = null; if(first!=null){ temp = first; for(int i=0;i<index;i++){ temp = temp.next; } if(temp != null){ return temp; } } return null; } public int size(){ return 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[]){ SxtLinkedList list = new SxtLinkedList(); list.add("aaa"); list.add("bbb"); list.add(1,"BBB"); list.add("ccc"); // list.remove(1); System.out.println(list.get(1)); } } class Node{ Node previous;//上一個節點 Object obj; Node next;//下一個節點 public Node() { } public Node(Object obj, Node next, Node previous) { this.obj = obj; this.next = next; this.previous = previous; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
LinkedList簡單實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.