自定义节点
大多数人使用链表都是看了一遍懵懵懂懂的,想要真正学习的人建议潜下心来自定义一个链表试试,自己搭建高楼大厦和看别人搭建是两码事,在自定义的过程中会明白自己创建的美妙感觉
代码参考
public class Node {
Node privious
;
Node next
;
Object element
;
public Node(){}
public Node(Node privious
, Node next
, Object element
) {
super();
this.privious
= privious
;
this.next
= next
;
this.element
= element
;
}
public Node(Object element
) {
super();
this.element
= element
;
}
}
使用自定义的节点创建链表方法
public class LinkedList01 <E>{
private Node first
;
private Node last
;
private int size
;
public void add(E element
) {
Node node
= new Node(element
);
if (first
== null
) {
first
= node
;
last
= node
;
} else {
node
.next
= null
;
node
.privious
= last
;
last
.next
= node
;
last
= node
;
}
size
++;
}
public Object
get(int index
) {
if (index
> size
- 1) {
throw new RuntimeException("数组索引不合法" + index
);
}
Node tem
= null
;
if (index
<= (size
>> 1)) {
tem
= first
;
for (int i
= 0; i
< index
; i
++) {
tem
= tem
.next
;
}
} else {
tem
= last
;
for (int j
= size
- 1; j
> index
; j
--) {
tem
= tem
.privious
;
}
}
return tem
.element
;
}
public void remove(int index
) {
Node tem
= null
;
if (index
<= (size
>> 1)) {
tem
= first
;
for (int i
= 0; i
< index
; i
++) {
tem
= tem
.next
;
}
if (tem
.next
!= null
) {
tem
.next
.privious
= tem
.privious
;
}
if (tem
.privious
!= null
) {
tem
.privious
.next
= tem
.next
;
}
} else {
tem
= last
;
for (int j
= size
- 1; j
> index
; j
--) {
tem
= tem
.privious
;
}
if (tem
.next
!= null
) {
tem
.next
.privious
= tem
.privious
;
}
if (tem
.privious
!= null
) {
tem
.privious
.next
= tem
.next
;
}
}
}
@Override
public String
toString() {
Node tem
= first
;
StringBuilder sb
= new StringBuilder();
sb
.append("[");
while (tem
!= null
) {
sb
.append(tem
.element
+ ",");
tem
= tem
.next
;
}
sb
.setCharAt(sb
.length() - 1, ']');
return sb
.toString();
}
}