最近开始学习数据结构和算法的学习,也自然开始在 leetcode 上练习,所以每周大概会分享做过的leetcode 练习,尽量做到每天更新一道题目。

作为 leetcode 练习笔记的第一道题目,选择了一道很经典的题目,反转链表。这是 leetcode 上的 206 题,链接如下:

https://leetcode-cn.com/problems/reverse-linked-list/

示例

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

思路

反转一个单链表,首先肯定需要遍历这个单链表,在遍历的时候就希望修改当前结点的 next 指针,指向其前一个结点,因此肯定需要一个保存前一个结点的变量,也就是反转后链表的头部指针。

实现的思路应该是这样的:

  1. 首先定义一个 prev 保存前一个结点,curr 保存当前结点,然后还有一个 nxt 保存下一个结点,其中 prev 就是最终的反转链表的头结点;
  2. 先让 nxt 保存下一个结点;
  3. 然后改变 currnext 指针,指向前一个结点,即 prev ;
  4. 接着,让 prev = curr
  5. 最后,就是让 curr = nxt,指向下一个结点
  6. 重复 2-5 步,直到当前结点为空。

下图展示了上述几个步骤的过程:

实现

利用 python 的特性,实现的时候关键代码其实就一行即可。

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre, cur = None, head
        while cur:
            pre, pre.next, cur = cur, pre, cur.next
        return pre

github地址:

https://github.com/ccc013/DataStructe-Algorithms_Study/blob/master/Python/Leetcodes/linked_list/206_Reverse_Linked_List.py

leetcode 练习--反转链表的更多相关文章

  1. LeetCode 92. 反转链表 II(Reverse Linked List II)

    92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...

  2. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  3. 每天一道面试题LeetCode 206 -- 反转链表

    LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...

  4. leetCode:206 反转链表

    206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...

  5. LeetCode 92 ——反转链表 II

    1. 题目 2. 解答 我们需要先找到第 m 个结点及其上一个结点,然后将从 m 到 n 的结点进行反转,最后依次将 m 到 n 反转后的结点和 n 之后的结点放入原链表中即可. 从前往后依次遍历 m ...

  6. Leetcode 92.反转链表

    92.反转链表 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL ...

  7. 力扣(LeetCode)反转链表 个人题解

    反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可以迭代或 ...

  8. LeetCode 92. 反转链表 II(Reverse Linked List II)

    题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, ...

  9. LeetCode 206.反转链表(Python3)

    题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可 ...

随机推荐

  1. vue路由传参及组件传参和组件方法调用

    VUE路由和组件传参 第一种vue自带的路由传参的三种基本方式 1.通过name :id传参 子组件通过$route.name接收参数 { path: '/particulars/:id', name ...

  2. Shell脚本实现---Swarm集群部署实例(Swarm Cluster)

    Shell脚本实现---Swarm集群部署实例(Swarm Cluster) 一.机器环境(均是centos7.8) IP hostname 角色 192.168.10.200 manager-swa ...

  3. Git系列:常用命令

    一.背景 作为一名程序员,怎么能不懂Git那些常用命令呢?于是花费一点时间来总结Git命令.关于安装的话,就不讲了. 二.常用命令 1.配置全局的用户名称和用户邮箱 git config --glob ...

  4. nacos、ribbon和feign的简明教程

    nacos简明教程 为什么需要nacos? 在微服务架构中,微服务之间经常要相互通信和调用,而且一个服务往往存在多个实例来降低负荷或保证高可用.我们假定A服务要调用B服务,最简单的方式把B服务的地址和 ...

  5. 请介绍下你了解的ThreadLocal,它的底层原理!

    前言 业务开发中经常使用 ThreadLocal 来存储用户信息等线程私有对象... ThreadLocal 内部构造是什么样子的?为什么可以线程私有?常说的内存泄露又是怎么回事? 公众号:liuzh ...

  6. 力扣 - 445. 两数相加 II

    目录 题目 思路 代码实现 题目 给你两个 非空 链表来代表两个非负整数.数字最高位位于链表开始位置.它们的每个节点只存储一位数字.将这两数相加会返回一个新的链表. 你可以假设除了数字 0 之外,这两 ...

  7. django环境安装操作整理!

    1. Django 下载地址:https://www.djangoproject.com/download/ 注意:目前 Django 1.6.x 以上版本已经完全兼容 Python 3.x. 2.安 ...

  8. Handler的源码和常见问题的解答不崩溃

    Handler是Android中的消息处理机制,是一种线程间通信的解决方案,同时你也可以理解为它天然的为我们在主线程创建一个队列,队列中的消息顺序就是我们设置的延迟的时间,如果你想在Android中实 ...

  9. Pandas_数据读取与存储数据(全面但不精炼)

    Pandas 读取和存储数据 目录 读取 csv数据 读取 txt数据 存储 csv 和 txt 文件 读取和存储 json数据 读取和存储 excel数据 一道练习题 参考 Numpy基础(全) P ...

  10. JS中的Array之方法(2)

    colors=['red','green','black','blue']; (1).  concat(element[|other array])  //联接数组 colors.concat('ye ...