单链表反转:
public class Node {
public int value;
public Node next;
public Node(int value) {
this.value = value;
}
}
public class Test {
public static void main(String[] args) {
Node n1 = new Node(1);
n1.next = new Node(2);
n1.next.next = new Node(3);
// 正序 1 2 3
// while (n1 != null) {
// System.out.println(n1.value);
// n1 = n1.next;
// }
// 反转后 3 2 1
n1 = reverseNode(n1);
while (n1 != null) {
System.out.println(n1.value);
n1 = n1.next;
}
}
public static Node reverseNode(Node head) {
Node pre = null;
Node next = null;
while (head != null) {
// 先记住下一个位置
next = head.next;
// head的下一个指向上一个
head.next = pre;
// 上一个指向head
pre = head;
// head指向下一个
head = next;
}
return pre;
}
}
双链表的反转:
public class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int value) {
this.value = value;
}
}
public class Test {
public static void main(String[] args) {
DoubleNode dn1 = new DoubleNode(1);
dn1.next = new DoubleNode(2);
dn1.last = null;
dn1.next.next = new DoubleNode(3);
dn1.next.last = dn1;
// 反转后 3 2 1
dn1 = reverseDoubleNode(dn1);
while (dn1 != null) {
System.out.println(dn1.value);
dn1 = dn1.next;
}
}
public static DoubleNode reverseDoubleNode(DoubleNode head) {
DoubleNode pre = null;
DoubleNode next = null;
while (head != null) {
// 先记住下一个位置
next = head.next;
// head的下一个指向上一个
head.next = pre;
// head的上一个指向下一个
head.last = next;
// 上一个指向head
pre = head;
// head指向下一个
head = next;
}
return pre;
}
}