方法解释
头插法 addInHead(Node node)
尾插法 addInTail(Node node)
从头遍历 headForEach()
从尾遍历 tailForEach()
按索引添加 addByIndex(int index,Node node)
Java类(自定义)
用到了MyLinkList的成员内部类Node
代码
public class linkedList {
public static void main(String[] args) {
MyLinkList myLinkList = new MyLinkList();
MyLinkList.Node jack = myLinkList.new Node("jack");
MyLinkList.Node tom = myLinkList.new Node("tom");
MyLinkList.Node hsp = myLinkList.new Node("老韩");
myLinkList.addInHead(jack);
myLinkList.addInTail(tom);
myLinkList.addInTail(hsp);
myLinkList.headForEach();
myLinkList.addByIndex(3, myLinkList.new Node("smith"));
System.out.println("==============");
myLinkList.headForEach();
System.out.println("==============");
myLinkList.tailForEach();
}
}
class MyLinkList {
public static int count;//节点个数
class Node {
public Object object;
public Node next;
public Node prev;
public Node(Object object) {
this.object = object;
}
@Override
public String toString() {
return "Node{" +
"object=" + object +
'}';
}
}
Node first;
Node last;
void addByIndex(int index, Node node) {
if (!(index >= 0 && index <= count)) {
throw new IndexOutOfBoundsException();
}
int count = 0;
Node beforeNode = this.first;
while (beforeNode.next != null) {
if (index == 0)
break;
beforeNode = beforeNode.next;
count++;
if (count == index - 1) {
break;
}
}
Node afterNode = beforeNode.next;
if (beforeNode == first) {
addInHead(node);
return;
}
if (afterNode == null) {
addInTail(node);
return;
}
node.next = afterNode;
beforeNode.next = node;
node.prev = beforeNode;
afterNode.prev = node;
MyLinkList.count++;
return;
}
void addInTail(Node node) {
if (first == null) {
first = node;
} else {
last.next = node;
node.prev = last;
}
last = node;
count++;
}
void addInHead(Node node) {
if (last == null) {
last = node;
} else {
first.prev = node;
node.next = first;
}
first = node;
count++;
}
void headForEach() {
Node next = first;
while (next != null) {
System.out.println(next);
next = next.next;
}
}
void tailForEach() {
Node prev = last;
while (prev != null) {
System.out.println(prev);
prev = prev.prev;
}
}
}