反转单链表和双链表,额外空间复杂度为O(1)
//两个变量,一个保存当前节点的之前的next,一个保存当前节点,
public static Node reverseList(Node head){
Node oldNext = null;
Node newNext = null;
while(head.next!=null){
//将当前节点的next保存
oldNext = head.next;
//将上一个节点作为新的next节点
head.next = newNext;
//将当前节点保存,用作下个节点的新next节点
newNext = head;
//进入下一个节点
head = oldNext;
}
head.next = newNext;
return head;
}
//和单链表类似
public static Node reverseDoubleList(Node head){
Node oldNext = null;
Node ref = null;
while(head.next!=null){
oldNext = head.next;
head.next = ref;
head.ref = oldNext;
ref = head;
head = oldNext;
}
head.next = ref;
head.ref = null;
return head;
}