public class Code01_ReverseList {
public static class Node{
public int value;
public Node next;
public Node(int value) {
this.value = value;
}
}
public static class DoubleNode{
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int value) {
this.value = value;
}
}
/**
* 单向链表反转
* 1.先记录head.next的节点;
* 2.把head.next指向空,将 head 赋值给pre(方便最后返回head的前一个节点) ,将step1中的节点赋值给head 使head后移;
* 3.重复step1-step2,直到head为空,返回head的前一个节点(此节点为反转后的链表头)
* @return
*/
public static Node reverseLinkedList(Node head){
Node pre = null;
Node next = null;
while (head !=null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return head;
}
/**
* 双向链表反转
* 1.记录head.next的节点;
* 2.将head.next 指向null,将 head.last 指向 step1 中的节点;
* 3.将 head 赋值给pre(方便最后返回head的前一个节点),将step1中的节点赋值给head 使head后移;
* .重复step1-step3,直到head为空,返回head的前一个节点(此节点为反转后的链表头)
* @param head
* @return
*/
public static DoubleNode reserDoubleList(DoubleNode head){
DoubleNode next = null;
DoubleNode pre = null;
while (head != null){
next = head.next;
head.next = pre;
head.last = next;
pre = head;
head = next;
}
return pre;
}
}
单链表和双链表的反转
最新推荐文章于 2022-10-08 22:13:49 发布