PS:双端链表(持有对最后一个节点的引用,允许表尾操作与表头操作等效的功能)
public class DoubleLinkedList {
//节点类
static class Node {
public Object data;
public Node next; public Node(Object dd) {
data = dd;
} @Override
public String toString() {
return String.valueOf(data);
}
} public Node head;//头结点
public Node tail;//尾节点 public DoubleLinkedList() {
head = null;
tail = null;
} public boolean isEmpty() {
return (head == null);
} // 表头插入
public void insertFirst(double dd) {
Node newLink = new Node(dd);
if (isEmpty()) {// 第一次插入节点
tail = newLink;
}
newLink.next = head;
head = newLink;
} // 表尾插入
public void insertLast(double dd) {
Node newLink = new Node(dd);
if (isEmpty()) {
head = newLink;
} else {
tail.next = newLink;
}
tail = newLink;
} // 删除表头
public void deleteFirst() {
head = head.next;
if (head.next == null) {
tail = null;
}
} public void displayList() {
System.out.print("List (first--->last)");
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
} public static void main(String[] args) {
DoubleLinkedList linkedList = new DoubleLinkedList();
for (int i = 0; i <= 30; i += 5) {
// 头插
linkedList.insertFirst(i);
}
System.out.println("头插");
linkedList.displayList();
// 删除表头数据
linkedList.deleteFirst();
linkedList.displayList();
linkedList = new DoubleLinkedList();
for (int i = 0; i <= 30; i += 5) {
// 尾插
linkedList.insertLast(i);
}
System.out.println("尾插");
linkedList.displayList();
linkedList.deleteFirst();
linkedList.displayList();
}
}