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

反转链表(Leetcode)

反转链表

Leetcode题目链接

题意:翻转一个单链表

🌰:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

在链表本身进行反转即可,不用重新定义链表,这同时浪费时间和空间。

需要采用哑节点吗?
不需要的,如果使用了哑节点还会造成报错。
如果给原链表添加哑节点:
dummy ->1->2->3->4->5->NULL
那么我们反转后就变成了:
5->4->3->2->1->dummy
这是不合理的,所以不使用哑节点。
还有一个问题,循环判断的条件是什么?
在该问题中,当链表被遍历到末尾后,程序便结束。
所以需要一个条件来确定链表是否已经被遍历到末尾。
代码如下:

class Solution{
  public ListNode reverseList(ListNode head){
    ListNode pre = null;
    ListNode cur = head;
    ListNode next = null;
    while(cur != null){
       next = cur.next;
       cur.next = pre;
       pre = cur;
       cur = next;
    }
      //注意,反转链表后,原来的末尾成为现在的头
     return pre; 
  }
}

递归方法:

// 递归 
// 递归的核心思路和双指针是一样的。
class Solution {
    public ListNode reverseList(ListNode head) {
        return reverse(null, head);
    }

    private ListNode reverse(ListNode prev, ListNode cur) {
        // 注意递归出来的条件,当前节点为null,表明已经遍历完成
        if (cur == null) {
            return prev;
        }
        ListNode temp = null;
        temp = cur.next;// 先保存下一个节点
        cur.next = prev;// 反转
        // 更新prev、cur位置
        // prev = cur;
        // cur = temp;
        return reverse(cur, temp);
    }
}

http://www.kler.cn/a/384937.html

相关文章:

  • 计算机网络——TCP篇
  • 谷歌地图和高德地图JSAPI宝典(Vue2和Vu3通用)
  • 深入理解Java中的接口
  • EPPlus 开源项目的编译和使用
  • RPA是什么,RPA有什么作用?
  • 【ddnsgo+ipv6】
  • 与同行争夺白牌商品市场 京东补贴100亿扶持1万家产业带工厂
  • commonJS | module.exports vs exports
  • 推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
  • 说说webpack proxy工作原理?为什么能解决跨域
  • Docker篇(registry私服)
  • 电路设计中的防接反电路
  • 《我的百科全书》——持续更新
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的方法
  • 《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明
  • git中的gitignore文件
  • PHP+MySQL开发的一套招聘管理系统开发案例源码功能介绍
  • Dockerfile的使用
  • 深入理解RocketMQ延迟消息机制原理
  • 2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
  • LabVIEW编程过程中为什么会出现bug?
  • 算法训练(leetcode)二刷第十九天 | *39. 组合总和、*40. 组合总和 II、*131. 分割回文串
  • [沫忘录]Redis 持久化
  • 分割回文串(DFS)
  • 技术分享 | 大语言模型赋能软件测试:开启智能软件安全新时代
  • explain执行计划分析 ref_