反转单链表和双链表
public static class Node{
private int value;
private Node next;
public Node(int value) {
this.value = value;
}
}
//打印单链表
private static void printNodeList(Node head){
System.out.println("nodeList print:");
while (null != head){
System.out.print(head.value+" ");
head = head.next;
}
System.out.println();
}
//反转单链表
private static Node reverseNodeList(Node head){
Node pre = null;
Node next;
while (null != head){
next = head.next;
head.next = pre;//将右侧结点放入左侧
pre = head;//当前结点完成左右转换
head = next;//换下一个结点继续反转
}
return pre;
}
//测试单链表
private static void testNodeListReverse() {
Node nodeHead = new Node(1);
nodeHead.next = new Node(2);
nodeHead.next.next = new Node(3);
printNodeList(nodeHead);
nodeHead = reverseNodeList(nodeHead);
printNodeList(nodeHead);
}
public static class DoubleNode{
private int value;
private DoubleNode pre;
private DoubleNode next;
public DoubleNode(int value) {
this.value = value;
}
}
private static void printDoubleNodeList(DoubleNode head){
System.out.println("doubleNodeList print:");
DoubleNode end = null;
while (null != head){
System.out.print(head.value+" ");
end = head;
head = head.next;
}
System.out.print(" | ");
while (null != end){
System.out.print(end.value+" ");
end = end.pre;
}
System.out.println();
}
private static DoubleNode reverseDoubleNodeList(DoubleNode head){
DoubleNode pre = null;
DoubleNode next = null;
while (null != head){
next = head.next;
head.next = pre;//右侧结点转换至左侧
head.pre = next;//左侧结点转换至右侧
pre = head;
head = next;//换下一个节点继续转换
}
return pre;
}