1. 程式人生 > >java實現鏈表模擬LinkedList類

java實現鏈表模擬LinkedList類

trac () object new mov this index als size

LinkedList類底層數據結構

模擬:

  1 package Collection;
  2 
  3 public class MyLinkedList {
  4     Node first;
  5     Node last;
  6     private int size;
  7     public MyLinkedList(){
  8         
  9     }
 10     /*
 11      * 添加一個新對象
 12      * */
 13     public boolean add(Object obj){
 14         Node node = new
Node(); 15 if(first == null){ 16 first = node; 17 last = node; 18 node.prev = null; 19 node.next = null; 20 node.obj = obj; 21 }else{ 22 node.prev = last;//下一個關聯上一個 23 node.next = null; 24 node.obj = obj;
25 last.next = node;//上一個關聯下一個 26 last = node; 27 } 28 size++; 29 return true; 30 } 31 /* 32 * 在index處添加一個新元素,作為index對應的元素 33 * */ 34 public boolean add(int index, Object obj){ 35 checkBound(index); 36 Node node = this
.first; 37 Node nodeTemp = new Node(); 38 if(index == 0){ 39 nodeTemp.obj = obj; 40 nodeTemp.prev = null; 41 nodeTemp.next = this.first; 42 this.first.prev = nodeTemp; 43 this.first = nodeTemp; 44 size++; 45 }else if(index == size - 1){ 46 add(obj); 47 size++; 48 }else{ 49 nodeTemp.obj = obj; 50 for(int i = 0; i < index; i++) 51 node = node.next; 52 nodeTemp.next = node; 53 nodeTemp.prev = node.prev; 54 node.prev.next = nodeTemp; 55 node.prev = nodeTemp; 56 size++; 57 } 58 return true; 59 } 60 /* 61 * 獲得元素個數 62 * */ 63 public int size(){ 64 return this.size; 65 } 66 /* 67 * 按照index獲得元素 68 * */ 69 public Object get(int index){ 70 checkBound(index); 71 Node node = this.first; 72 for(int i = 0; i < index; i++) 73 node = node.next; 74 if(node != null) 75 return node.obj; 76 else 77 return null; 78 } 79 /* 80 * 移除index處的元素 81 * */ 82 public boolean remove(int index){ 83 checkBound(index); 84 Node node = this.first; 85 if(index == 0){ 86 this.first = this.first.next; 87 size--; 88 }else if(index == size - 1){ 89 for(int i = 0; i < index; i++) 90 node = node.next; 91 node.prev.next = null; 92 size--; 93 }else{ 94 for(int i = 0; i < index; i++) 95 node = node.next; 96 node.prev.next = node.next; 97 node.next.prev = node.prev; 98 size--; 99 } 100 return true; 101 } 102 /* 103 * 移除obj對象 104 * */ 105 public boolean remove(Object obj){ 106 remove(indexOf(obj)); 107 return true; 108 } 109 /* 110 * 檢索對象obj,返回index 111 * */ 112 private int indexOf(Object obj){ 113 Node node = this.first; 114 for(int i = 0; i < this.size; i++){ 115 if(node.obj.equals(obj)) 116 return i; 117 node = node.next; 118 } 119 return -1; 120 } 121 /* 122 * 倒序檢索 123 * */ 124 public int lastIndexof(Object obj){ 125 Node node = this.last; 126 for(int i = 0; i < this.size; i++){ 127 if(node.obj.equals(obj)) 128 return size - i - 1; 129 node = node.prev; 130 } 131 return -1; 132 } 133 /* 134 * 檢查邊界 135 * */ 136 private void checkBound(int index){ 137 if(index < 0 || index > this.size) 138 try { 139 throw new Exception(); 140 } catch (Exception e) { 141 // TODO Auto-generated catch block 142 e.printStackTrace(); 143 } 144 } 145 } 146 /* 147 * Node類 148 * */ 149 class Node{ 150 Node prev; 151 Node next; 152 Object obj; 153 public Node(){ 154 155 } 156 }

java實現鏈表模擬LinkedList類