首页 > 其他分享 >链表的反转

链表的反转

时间:2022-12-19 19:12:03浏览次数:41  
标签:pre head 反转 next 链表 public null 节点

链表的反转

单链表的反转

关于单链表的反转最重要的是要弄清楚边界问题。我们首先记录以下头节点的下一个节点然后让头节点的下一“指针”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

相关文章

  • 单链表与队列和栈
    单链表与队列和栈使用单链表实现队列队列是一个先进先出的数据结构,它包括进队、出队、获取队列大小等功能。代码:/***使用单链表实现队列*队列是一个先进先出的......
  • [leetcode]第 2 天 链表(简单)
    06.从尾到头打印链表思路说到从尾到头,很容易想到可以用到栈的方式进行处理,那么问题就转化成了如何用辅助栈完成打印链表。可以从链表的头节点开始,依次将每个节点压入栈......
  • 剑指Offer——链表的环以及环的入口
    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5解题思路这个题包含两个子问......
  • 数据结构 玩转数据结构 7-2 基于链表的集合实现
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13704 1重点关注1.1使用链表实现集合Set详见3.1用链表实现的集合  2......
  • [LeetCode]007-整数反转
    >>>传送门题目给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1],就返回0。假......
  • 从redis源码看数据结构(一)链表
    文章目录​​从redis源码看数据结构(一)链表​​​​一,redis数据类型​​​​二,redis底层列表实现​​​​1.列表底层数据结构​​​​2.redis双向链表操作​​​​新建链表​......
  • 链表与数组的区别
    原文链接:https://baijiahao.baidu.com/s?id=1743478279629141019物理存储结构不同链表与数组在计算机中存储元素采用不同的物理存储结构,数组是顺序存储结构,链表是链式......
  • 链表--删除无序链表中重复的节点
    题目:给定一个无顺序单链表的头节点head,删除其中值重复的元素思路:利用哈希表。生成一个哈希表,因为头节点是没有必要去删除的节点,所以首先将头节点放入哈希表;从头......
  • redis底层数据结构之双向链表(linkedlist)
    双向链表(linkedlist)redis的双向链表(linkedlist)是基于链表的一种数据结构链表是一种常见的基础数据结构,是一种非顺序存储数据的线性表,在每一个节点里存储了下一个节点......
  • 链表经典问题
    链表经典问题1.反转链表问题:将链表反转,并返回新的头节点。思路:设置两个指针,反别表示现节点和前节点,遍历链表,同时设置一个临时指针储存下一个节点。然后让现指针的next指......