链式存储结构的Java实现

 
 
 
 
 
  1 package com.berry.algorithm.linkedlist;
  2 
  3 /**
  4  * 链式存储结构的实现
  5  */
  6 public class LinkedListArray {
  7 
  8     private LinkedListElement element = null;
  9 
 10     /**
 11      *
 12      * @param value
 13      * 在链的末端插入一个元素
 14      */
 15     public synchronized void create(int value){
 16 
 17         if(this.element == null){
 18             this.element = new LinkedListElement(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 = new LinkedListElement(value);
 28         }
 29     }
 30 
 31     /**
 32      *
 33      * @param value
 34      * @param index
 35      * 在链的指定位置插入一个元素
 36      */
 37     public synchronized void create(int value, int index){
 38 
 39         if(this.element == null || index < 0){
 40             return;
 41         }
 42 
 43         if(index == 0){
 44             LinkedListElement newElement = new LinkedListElement(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 = new LinkedListElement(value);
 56             return;
 57         }
 58 
 59         while(temp != null){
 60 
 61             if(i == index){
 62                 LinkedListElement newElement = new LinkedListElement(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 = new LinkedListElement(value);
 75         }
 76     }
 77 
 78     /**
 79      *
 80      * @param value
 81      * 在链的末端插入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 = new LinkedListElement(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 = new LinkedListElement(value[i]);
109                 temp = temp.next;
110             }
111         }
112     }
113 
114     /**
115      *
116      * @param value
117      * @param index
118      * 在链的指定位置插入n个元素,元素通过数组的方式传参
119      */
120     public synchronized void create(int[] value, int index){
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 = new LinkedListElement(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 = new LinkedListElement(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 = new LinkedListElement(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 = new LinkedListElement(value[j]);
178                 temp = temp.next;
179             }
180         }
181     }
182 
183     /**
184      *
185      * @param index
186      * 删除指定位置的元素
187      */
188     public synchronized void delete(int index){
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      * @param index
229      * 读取指定位置的元素
230      */
231     public synchronized Integer read(int index){
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               return temp.value;
247           }else{
248               temp = temp.next;
249               i++;
250           }
251         }
252 
253         return null;
254     }
255 
256     /**
257      *
258      * 获取链的长度
259      */
260     public synchronized int length(){
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             return i;
272         }
273     }
274 
275     /**
276      *
277      * 遍历并打印链的所有元素
278      */
279     public void show(){
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 class LinkedListElement {
298 
299         public LinkedListElement next = null;
300 
301         public int value;
302 
303         public LinkedListElement(int value){
304             this.value = value;
305         }
306     }
307 }

 

转载于:https://www.cnblogs.com/kohakuhubo/p/6293593.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值