当前位置: 首页 > news >正文

2025年- G19-Lc93-206.反向链接链表-java版

1.题目描述

在这里插入图片描述
在这里插入图片描述
2.思路
思路一:
链表是一个典型的链表操作,通常可以通过迭代或递归来完成,而不是通过排序。
思路二:
在链表反转的过程中,prev 代表的是当前节点的前一个节点。它是一个用来帮助我们反转链表指针的辅助指针。
(1)prev 是用于存储当前节点的前一个节点,反转过程中不断向前移动。
(2)每一步,curr 节点的 next 指针都指向了 prev,反转了链表的方向。
(3)最终,prev 会指向新的头节点,即链表反转后的头节点。
在这里插入图片描述

在这里插入图片描述

3.java代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
       // 1.递归终止条件:当前节点为 null 或当前节点为最后一个节点
       {
        if(head==null||head.next==null)
        {
            return;
        }
        // 2.递归反转链表的剩余部分
        ListNode newhead=reverseList(head.next);
        
            head.next.next=head;// 反转当前节点
            head.next=null;// 当前节点的 next 置为 null
        return newHead;  // 返回反转后的头节点
       }
        
    }
}

方法二:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
    //    // 1.递归终止条件:当前节点为 null 或当前节点为最后一个节点
    //    {
    //     if(head==null||head.next==null)
    //     {
    //         return head;
    //     }
    //     // 2.递归反转链表的剩余部分
    //     ListNode newhead=reverseList(head.next);
        
    //         head.next.next=head;// 反转当前节点
    //         head.next=null;// 当前节点的 next 置为 null
    //     return newhead;  // 返回反转后的头节点
    //    }

   ListNode  prev=null;//prev 是用于存储当前节点的前一个节点,反转过程中不断向前移动
   //prev 在链表反转过程中是一个辅助指针,它记录的是当前节点的前一个节点。
   //每一步,curr 节点的 next 指针都指向了 prev,反转了链表的方向。
   //最终,prev 会指向新的头节点,即链表反转后的头节点。
   ListNode  current=head;// curr 从 head 开始
   while(current!=null)
   {
    ListNode temp=current.next;// 保存当前节点的下一个节点
    current.next=prev;//将当前节点的 next 指向前一个节点
    prev=current;// prev 向前移动
    current=temp;// curr 向前移动

    //head 指向的是链表的原始头节点,不会随着反转操作改变。
//curr 是链表反转过程中动态变化的指针,表示当前正在操作的节点,因此循环条件是 curr != null,直到遍历完整个链表。
    


   

   }
      // prev 是反转后的头节点
      return prev;

        
    }
}

相关文章:

  • Mysql——约束与多表查询
  • DeepSeek 助力 Vue3 开发:打造丝滑的标签输入(Tag Input)
  • DeepSeek:我的AI助手之旅
  • 大白话React第七章深入学习 React 高级特性与优化阶段
  • 谷歌推出PaliGemma 2 mix:用于多任务的视觉语言模型,开箱即用。
  • Hive从入门到运用
  • 使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力
  • DeepSeek 开源了 DeepEP
  • 单片机病房呼叫系统设计
  • 数据开发的简历及面试
  • 程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图
  • SV——Clocking block的应用
  • Spring Boot2.0之十 使用自定义注解、Json序列化器实现自动转换字典类型字段
  • 【Linux】Linux常用命令
  • Spring Boot 项目中如何在 `pom.xml` 文件中引入本地 JAR 包
  • 「JVS更新日志」低代码、企业会议、智能BI、智能排产2.26更新说明
  • 使用TortoiseGit配合BeyondCompare实现在Git仓库中比对二进制文件
  • QML Text部件的使用
  • JavaScript系列(90)--前端脚手架开发
  • 用Golang与WebAssembly构建高性能Web应用:详解`syscall/js`包
  • 如何防止别人攻击自己的网站/网络营销策略的内容
  • 一品威客网app下载/seo的作用有哪些
  • pc网站建设的三大条件/seo关键技术有哪些
  • 做网站所需的知识技能/新媒体营销案例
  • ui设计网站开发/如何推广一个网站
  • 邯郸个人做网站/最近新闻报道