链表的反转
单链表的反转
关于单链表的反转最重要的是要弄清楚边界问题。我们首先记录以下头节点的下一个节点然后让头节点的下一“指针”next指向前指针pre刚开始为null,然后pre指针下移指向当前头节点的位置然后头节点下移指向刚刚记录头节点下一节点的位置最后返回pre。当head!=null的时候循环往复操作。
代码:
public class LinkedNode {
//1.定义一个类用来表示单链表节点信息
public static class Node {
public int value;
public Node next;
public Node(int value) {
this.value = value;
}
}
//一:单链表的反转
public static Node reverseLinkedList(Node head){
//1.定义一个前”指针“
Node pre = null;
//2.定义一个后”指针“
Node next = null;
//3.进行循环当head!=null的时候
while(head != null){
//首先我们要把头节点的下一个节点记录下来
next = head.next;
//然后让头节点的后指针指向前指针null
head.next = pre;
//然后前”指针“后移
pre = head;
//然后头节点后移 这就是为什么首先要把头节点后一个节点记录
head = next;
}
//最后返回前节点pre
return pre;
}
双链表的反转
双链表的反转与单链表的反转类似区别在于双链表的反转要考虑的边界条件更多。首先我们也同样需要记录以下头节点head的下一节点的位置next然后需要将head的next指向pre,并且将head的pre指向刚刚记录下的next,然后将pre指向head并将head指向next。当head!=null的时候循环往复操作最后返回pre。
代码:
//2.定义一个类用来表示双链表节点信息
public static class DoubleNode {
public int value;
public DoubleNode next;
public DoubleNode pre;
public DoubleNode(int value) {
this.value = value;
}
}
//二:双链表的反转
public static DoubleNode reverseDoubleLinkedList(DoubleNode head){
//1.定义一个前”指针“
DoubleNode pre = null;
//2.定义一个后”指针“
DoubleNode next = null;
//3.当head!=null时候开始循环
while (head != null) {
//首先我们也需要先记录下头节点的下一个节点
next = head.next;
//然后我们需要把头节点的下一个指针指向null
head.next = pre;
//我们需要把头节点的前一个指针指向头节点的后一个节点
head.pre = next;
//然后我们需要把pre后移
pre = head;
//我们也需要把head后移
head = next;
}
//最后我们要返回pre节点
return pre;
}
标签:pre,head,反转,next,链表,public,null,节点
From: https://www.cnblogs.com/ygstudy/p/16992840.html