|
13 | 13 | public class MLinkList<E> { |
14 | 14 | // 定义一个内部类Node,代表链表的节点 |
15 | 15 | private class Node { |
16 | | - private E data;// 保存数据 |
| 16 | + private E value;// 保存数据 |
17 | 17 | private Node next;// 指向下个节点的引用 |
18 | 18 |
|
19 | 19 | // 无参构造器 |
20 | 20 | public Node() { |
21 | 21 | } |
22 | 22 | // 初始化全部属性的构造器 |
23 | 23 | public Node(E data, Node next) { |
24 | | - this.data = data; |
| 24 | + this.value = data; |
25 | 25 | this.next = next; |
26 | 26 | } |
27 | 27 | } |
@@ -55,7 +55,7 @@ public E deleteFirst(){ |
55 | 55 | data=temp.next; |
56 | 56 | temp.next=null;//释放应用 |
57 | 57 | size--; |
58 | | - return temp.data; |
| 58 | + return temp.value; |
59 | 59 | } |
60 | 60 |
|
61 | 61 | /** |
@@ -94,7 +94,7 @@ public void set(int inddex,E element){ |
94 | 94 | current=current.next; |
95 | 95 | j++; |
96 | 96 | } |
97 | | - current.data=element; |
| 97 | + current.value=element; |
98 | 98 | } |
99 | 99 | /** |
100 | 100 | * 增加一个末尾结点 |
@@ -128,7 +128,7 @@ public E get(int index){ |
128 | 128 | temp=temp.next; |
129 | 129 | j++; |
130 | 130 | } |
131 | | - return temp.data; |
| 131 | + return temp.value; |
132 | 132 | } |
133 | 133 |
|
134 | 134 | /** |
@@ -160,7 +160,7 @@ public void delete(int index){ |
160 | 160 | public void delete(E element){ |
161 | 161 | Node temp=data; |
162 | 162 | Node current=data; |
163 | | - while (!temp.data.equals(element)){ |
| 163 | + while (!temp.value.equals(element)){ |
164 | 164 | if (temp.next==null){ |
165 | 165 | return; |
166 | 166 | } |
@@ -191,24 +191,44 @@ public int size(){ |
191 | 191 | @Override |
192 | 192 | public String toString(){ |
193 | 193 | StringBuilder sb=new StringBuilder(); |
194 | | - int j=1; |
195 | 194 | Node temp=data; |
196 | | - while (j<size){ |
197 | | - sb.append(data.data); |
198 | | - temp= data.next;//找到最后一个结点 |
199 | | - j++; |
| 195 | + while (temp!=null){ |
| 196 | + sb.append(temp.value); |
| 197 | + temp= temp.next;//找到最后一个结点 |
200 | 198 | } |
201 | 199 | return sb.toString(); |
202 | 200 | } |
| 201 | + |
| 202 | + /** |
| 203 | + * 反转链表O(n)复杂度实现 |
| 204 | + */ |
| 205 | + public void reverseLinkedList(){ |
| 206 | + if (data==null || data.next==null){ |
| 207 | + return; |
| 208 | + } |
| 209 | + Node p1=data; |
| 210 | + Node p2=data.next; |
| 211 | + Node p3=null; |
| 212 | + while (p2!=null){ |
| 213 | + p3=p2.next; |
| 214 | + p2.next=p1; |
| 215 | + p1=p2; |
| 216 | + p2=p3; |
| 217 | + } |
| 218 | + data.next=null; |
| 219 | + data=p1; |
| 220 | + System.out.println("反转完毕"); |
| 221 | + } |
203 | 222 | public static void main(String[] args) { |
204 | 223 | MLinkList mLinkList=new MLinkList(); |
205 | 224 | mLinkList.add("a"); |
206 | 225 | mLinkList.add("b"); |
207 | 226 | mLinkList.add("c"); |
208 | | - mLinkList.add("b"); |
209 | | - mLinkList.add("a"); |
210 | | - System.out.println(mLinkList.toString()); |
| 227 | + mLinkList.add("d"); |
| 228 | +// System.out.println(mLinkList.toString()); |
211 | 229 | System.out.println(mLinkList.size); |
| 230 | +// System.out.println(mLinkList.toString()); |
| 231 | + mLinkList.reverseLinkedList(); |
212 | 232 | System.out.println(mLinkList.toString()); |
213 | 233 |
|
214 | 234 | } |
|
0 commit comments