LeetCode [链表] 206. Reverse Linked List (C++和Python实现)

2024-04-09 11:18

本文主要是介绍LeetCode [链表] 206. Reverse Linked List (C++和Python实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

206. Reverse Linked List [难度:简单]

【题目】

Reverse a singly linked list.

Example:

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

Follow up:

A linked list can be reversed either iteratively or recursively. Could you implement both?

【解题C++】

iteratively or recursively 来,积累英语词汇了~ 迭代和递归。话说这个居然归类为简单orz,大概是我在模拟方面比较笨蛋,我一直认为逆转链表是很难的部分了...... 

迭代有很多种实现方法,如下的就是在遍历链表的同时,让结点一个个掉头指向新结点,这个过程要更新新结点和头结点的指向,最后返回新结点就好啦。(ps:这个代码非常顶真,实在不懂也方便记忆)

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*///迭代版 
class Solution {
public:ListNode* reverseList(ListNode* head) {//初始结点最后会成为尾结点,所以要置空ListNode *newL = NULL,*tmp = NULL;if(head==NULL) return head;//遍历链表 while(head){//记录下一个要遍历的结点 tmp = head->next;//当前结点指向新结点 head->next = newL;//更新新结点指向 newL = head;//更新要遍历的结点指向head = tmp;}return newL;}
};

递归的核心是把问题的规模缩小,再调用函数一层层返回(栈的思想),最后还得加个终止条件。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*///递归版 
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode *p1,*p2;//前者是空链表的判断,后者是边界条件 if(head==NULL||head->next==NULL)return head;p1 = head; //记录当前结点a0 p2 = head->next; //记录下一结点a1 head = reverseList(p2); //返回a1~an逆转后的头结点 p2->next = p1; //用上面逆转后的尾结点指向原来的头结点 p1->next = NULL; //原来的头结点逆转后作为尾结点,next域置空 return head;  	}
};

【解题Python】 

思路同C++。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None# 迭代版
class Solution:def reverseList(self, head: ListNode) -> ListNode:newL = tmp = Nonewhile head:tmp = head.nexthead.next = newLnewL = headhead = tmpreturn newL
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None# 递归版
class Solution:def reverseList(self, head: ListNode) -> ListNode:p1 = p2 = headif head is None or head.next is None:return headp1 = headp2 = head.nexthead = self.reverseList(p2)p2.next = p1p1.next = Nonereturn head

这篇关于LeetCode [链表] 206. Reverse Linked List (C++和Python实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/888007

相关文章

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的