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

反转链表(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.lryc.cn/news/479832.html

相关文章:

  • 制作游戏外挂的技术栈有哪些
  • python下载pdf
  • 我们来学mysql -- 同时使用 AND 和 OR 查询错误(填坑篇)
  • 关于Websocket
  • vue2 pdf 链接地址打开
  • c# 动态lambda实现二级过滤(多种参数类型)
  • 34.Redis事务
  • 认识类和对象
  • 解决echarts桑基图为0时tooltip不显示的问题
  • vue3 基础笔记
  • Oracle 第30章:最佳实践与案例研究
  • 第九周预习报告
  • 【分享】这篇教程助力你成为 JavaScript 糕手!(四)
  • 双亲委派模型的破坏
  • Android关机流程知多少?
  • 深入理解指针end(总结篇)
  • C# 程序暂停的两种方式
  • 【LeetCode】【算法】160.相交链表
  • 光伏破局 引领能源革命
  • Jenkins声明式Pipeline流水线语法示例
  • 互联网技术净土?原生鸿蒙开启全新技术征程
  • 关于Django 模型字段 `choices`自定义数据类型的枚举——补充
  • CAP理论的延申--BASE理论
  • 【傻呱呱】phpMyAdmin怎样给特定用户授权特定数据库权限?
  • 『VUE』21. 组件注册(详细图文注释)
  • 如何产看SQL 查询的执行时间
  • 计算机网络——路由器构成
  • 架构师之路-学渣到学霸历程-48
  • HappyChart——一款简单好用的专业绘图软件
  • 【Linux】进程信号全攻略(二)