反转单双链表
链表长度为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;//返回新头节点
}
本文介绍了一种高效的反转单链表和双链表的方法。对于长度为n的链表,该方法能在O(n)的时间复杂度内完成反转操作,并且仅使用了O(1)的空间。文章提供了详细的代码实现,包括如何迭代地更改每个节点的指针方向。
853

被折叠的 条评论
为什么被折叠?



