1 packagecom.berry.algorithm.linkedlist;2
3 /**
4 * 链式存储结构的实现5 */
6 public classLinkedListArray {7
8 private LinkedListElement element = null;9
10 /**
11 *12 *@paramvalue13 * 在链的末端插入一个元素14 */
15 public synchronized void create(intvalue){16
17 if(this.element == null){18 this.element = newLinkedListElement(value);19 }else{20 LinkedListElement temp = this.element;21 LinkedListElement last = null;22 do{23 last =temp;24 temp =temp.next;25 }while(temp != null);26
27 last.next = newLinkedListElement(value);28 }29 }30
31 /**
32 *33 *@paramvalue34 *@paramindex35 * 在链的指定位置插入一个元素36 */
37 public synchronized void create(int value, intindex){38
39 if(this.element == null || index < 0){40 return;41 }42
43 if(index == 0){44 LinkedListElement newElement = newLinkedListElement(value);45 newElement.next = this.element;46 this.element =newElement;47 return;48 }49
50 LinkedListElement temp = this.element.next;51 LinkedListElement last = this.element;52 int i = 1;53
54 if(temp == null){55 this.element.next = newLinkedListElement(value);56 return;57 }58
59 while(temp != null){60
61 if(i ==index){62 LinkedListElement newElement = newLinkedListElement(value);63 newElement.next =temp;64 last.next =newElement;65 return;66 }else{67 last =temp;68 temp =temp.next;69 i++;70 }71 }72
73 if(index >=i){74 last.next = newLinkedListElement(value);75 }76 }77
78 /**
79 *80 *@paramvalue81 * 在链的末端插入n个元素,元素通过数组的方式传参82 */
83 public synchronized void create(int[] value){84
85 if(value == null || value.length == 0){86 return;87 }88
89 if(this.element == null){90
91 this.element = new LinkedListElement(value[0]);92 LinkedListElement temp = this.element;93 for(int i = 1;i < value.length;i++){94 temp.next = newLinkedListElement(value[i]);95 temp =temp.next;96 }97 }else{98 LinkedListElement temp = this.element;99 LinkedListElement last = null;100 do{101 last =temp;102 temp =temp.next;103 }while(temp != null);104
105 last.next = new LinkedListElement(value[0]);106 temp =last.next;107 for(int i = 1;i < value.length;i++){108 temp.next = newLinkedListElement(value[i]);109 temp =temp.next;110 }111 }112 }113
114 /**
115 *116 *@paramvalue117 *@paramindex118 * 在链的指定位置插入n个元素,元素通过数组的方式传参119 */
120 public synchronized void create(int[] value, intindex){121
122 if(this.element == null || index < 0){123 return;124 }125
126 if(index == 0){127 LinkedListElement newElement = new LinkedListElement(value[0]);128 LinkedListElement temp =newElement;129 for(int i = 1;i < value.length;i++){130 temp.next = newLinkedListElement(value[i]);131 temp =temp.next;132 }133
134 temp.next = this.element;135 this.element =newElement;136 return;137 }138
139 LinkedListElement temp = this.element.next;140 LinkedListElement last = this.element;141 int i = 1;142
143 if(temp == null){144 this.element.next = new LinkedListElement(value[0]);145 temp = this.element.next;146 for(int k = 1;k < value.length;k++){147 temp.next = newLinkedListElement(value[k]);148 temp =temp.next;149 }150 return;151 }152
153 while(temp != null){154
155 if(i ==index){156 LinkedListElement newElement = new LinkedListElement(value[0]);157 last.next =newElement;158
159 LinkedListElement temp2 =newElement;160 for(int k = 1;k < value.length;k++){161 temp2.next = newLinkedListElement(value[k]);162 temp2 =temp2.next;163 }164 temp2.next =temp;165 return;166 }else{167 last =temp;168 temp =temp.next;169 i++;170 }171 }172
173 if(index >=i){174 last.next = new LinkedListElement(value[0]);175 temp =last.next;176 for(int j = 1;j < value.length;j++){177 temp.next = newLinkedListElement(value[j]);178 temp =temp.next;179 }180 }181 }182
183 /**
184 *185 *@paramindex186 * 删除指定位置的元素187 */
188 public synchronized void delete(intindex){189
190 if(this.element == null || index < 0){191 return;192 }193
194 if(index == 0){195 if(this.element.next != null){196 this.element = this.element.next;197 return;198 }else{199 this.element = null;200 return;201 }202 }else{203 LinkedListElement temp = this.element.next;204 LinkedListElement tempBefore1 = this.element;205 int i = 1;206
207 while(temp != null){208
209 if(i ==index){210 if(temp.next == null){211 tempBefore1.next = null;212 break;213 }else{214 tempBefore1.next =temp.next;215 break;216 }217 }else{218 tempBefore1 =temp;219 temp =temp.next;220 i++;221 }222 }223 }224 }225
226 /**
227 *228 *@paramindex229 * 读取指定位置的元素230 */
231 public synchronized Integer read(intindex){232
233 if(this.element == null || index < 0){234 return null;235 }236
237 if(index == 0){238 return this.element.value;239 }240
241 LinkedListElement temp = this.element.next;242 int i = 1;243
244 while(temp != null){245 if(i ==index){246 returntemp.value;247 }else{248 temp =temp.next;249 i++;250 }251 }252
253 return null;254 }255
256 /**
257 *258 * 获取链的长度259 */
260 public synchronized intlength(){261
262 if(this.element == null){263 return 0;264 }else{265 int i = 1;266 LinkedListElement temp = this.element.next;267 while(temp != null){268 temp =temp.next;269 i++;270 }271 returni;272 }273 }274
275 /**
276 *277 * 遍历并打印链的所有元素278 */
279 public voidshow(){280 if(this.element == null){281 System.out.println("Array hasn't element");282 }else{283 LinkedListElement temp = this.element;284 int i = 0;285 while(temp != null){286 System.out.println("element " + i + ": " +temp.value);287 temp =temp.next;288 i++;289 }290 }291 }292
293 /**
294 *295 * 链的元素类(结构体)296 */
297 private classLinkedListElement {298
299 public LinkedListElement next = null;300
301 public intvalue;302
303 public LinkedListElement(intvalue){304 this.value =value;305 }306 }307 }