java实现双端链表
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();
}
}

浙公网安备 33010602011771号