反转单双链表
链表长度为n,时间复杂度为O(n),空间复杂度为O(1).
反转单链表
代码块
public class Node {
public int val;
public Node next;
public Node (int val){
this.val=val;
}
}
public Node reverseList(Node head){
Node pre=null;
Node next=null;
while(head!=null){
//反转第一个节点
next=head.next;//记录下一个节点
head.next=pre;//反转当前节点
pre=head;//记录当前节点为下一个节点的pre
head=next;//移动到下一个节点
}
return pre;//返回新头节点
}
反转双链表
代码块
public class DoubleNode {
public int val;
public DoubleNode pre;
public DoubleNode next;
public DoubleNode (int val){
this.val=val;
}
}
public Node reverseList(Node head){
DoubleNode pre=null;
DoubleNode next=null;
while(head!=null){
//反转第一个节点
next=head.next;//记录下一个节点
head.next=pre;//反转当前节点:next指针指向上一个节点
head.pre=next;//反转当前节点:pre指针指向下一个节点
pre=head;//记录当前节点为下一个节点的pre
head=next;//移动到下一个节点
}
return pre;//返回新头节点
}