public class MyBiLinkedList {
Node head;
Node tail;
public Node getLast() {
// temp变量来保存链表的最后那个节点
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
// 循环结束时,temp就是最后那个节点
return temp;
}
// 添加新节点到链表尾部
public void append(int obj) {
Node node = new Node(obj);
if (head == null) {
head = node;
} else {
Node last = getLast();
// 添加新节点
last.next = node;
node.prev = last;
tail = node;
}
}
public void display() {
Node temp = head;
StringBuilder sb = new StringBuilder();
while (temp != null) {
sb.append(temp.value + " -> ");
temp = temp.next;
}
String res = sb.substring(0, sb.lastIndexOf(" -> "));
System.out.println(res);
}
public void display2() {
Node temp = tail;
StringBuilder sb = new StringBuilder();
while (temp != null) {
sb.append(temp.value + " -> ");
temp = temp.prev;
}
String res = sb.substring(0, sb.lastIndexOf(" -> "));
System.out.println(res);
}
public static class Node {
Node prev;
Node next;
int value;
public Node(int value) {
super();
this.value = value;
}
public Node() {
}
}
// 反转双向链表
public void reverse() {
Node pre = null;
Node next = null;
while (head != null) {
next = head.next;
head.next = pre;// ->改为<-
head.prev = next;// <-改为->
pre = head;// pre右移
head = next;// head右移
}
head = pre;
}
public static void main(String[] args) {
MyBiLinkedList linkedList = new MyBiLinkedList();
linkedList.append(5);
linkedList.append(4);
linkedList.append(3);
linkedList.append(2);
linkedList.append(1);
linkedList.display();
linkedList.reverse();
linkedList.display();
}
}