前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每日leetcode】16.反转链表

【每日leetcode】16.反转链表

作者头像
一条coding
发布2021-08-12 10:36:18
1950
发布2021-08-12 10:36:18
举报
文章被收录于专栏:一条IT

有点绝望。没刷过算法,我发现基本的迭代都想不出来,贼打击,而且看了答案,要自己理解记住感觉过段时间就会忘那种。害。怀疑人生 ——leetcode此题热评

前言

哈喽,大家好,我是一条。 糊涂算法,难得糊涂 这是一道超级经典的题目,大家要好好做哦!

Question

206. 反转链表

难度:简单

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

代码语言:javascript
复制
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

代码语言:javascript
复制
输入:head = [1,2]
输出:[2,1]

示例 3:

代码语言:javascript
复制
输入:head = []
输出:[]

提示:

链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

Solution

这道题总体来说有两种思路:

  • 先实现局部替换,从而全部替换,可以用迭代或者递归实现。
  • 利用栈先进后出的特点,实现反转

本文主要讲解迭代法

  • 在遍历链表时,将当前节点的 next 指针改为指向前一个节点。
  • 由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。
  • 在更改引用之前,还需要存储后一个节点。最后返回新的头引用。

Code

所有leetcode代码已同步至github https://github.com/lbsys 欢迎star

代码语言:javascript
复制
/**
 * @author yitiaoIT
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
}

Result

复杂度分析

  • 时间复杂度:O(N)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一条coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Question
    • 206. 反转链表
    • Solution
    • Code
    • Result
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档