LeetCode怎样反转链表
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这篇文章主要为大家展示了"LeetCode怎样反转链表",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"LeetCode怎样反转链表"这篇文章吧。题目描述反转
千家信息网最后更新 2025年01月28日LeetCode怎样反转链表
这篇文章主要为大家展示了"LeetCode怎样反转链表",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"LeetCode怎样反转链表"这篇文章吧。
题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路
链表一般都是用迭代或是递归法来解决,而且一般都是构造双指针、三指针,比如反转链表或是DP动态规划。
双指针迭代
我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
第二个指针 cur 指向 head,然后不断遍历 cur。
每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。
java实现
class Solution {
public ListNode reverseList(ListNode head) {
//申请结点,pre和 cur,pre指向null
ListNode pre = null;
ListNode cur = head;
ListNode tmp = null;
while(cur!=null) {
//记录当前节点的下一个节点
tmp = cur.next;
//然后将当前节点指向pre
cur.next = pre;
//pre和cur节点都前进一位
pre = cur;
cur = tmp;
}
return pre;
}
}
Python实现
class Solution(object):
def reverseList(self, head):
if not head or not head.next:
return head
l = head
r = head.next
remain = r.next
l.next = None
while r:
r.next = l
l = r
r = remain
if remain:
remain = remain.next
return l
递归实现:
递归的两个条件:
终止条件是当前节点或者下一个节点==null 在函数内部,改变节点的指向,也就是 head 的下一个节点指向 head 递归函数那句 head.next.next = head
很不好理解,其实就是 head 的下一个节点指向head。
递归函数中每次返回的 cur 其实只最后一个节点,在递归函数内部,改变的是当前节点的指向。
class Solution {
public ListNode reverseList(ListNode head) {
//递归终止条件是当前为空,或者下一个节点为空
if(head==null || head.next==null) {
return head;
}
//这里的cur就是最后一个节点
ListNode cur = reverseList(head.next);
//如果链表是 1->2->3->4->5,那么此时的cur就是5
//而head是4,head的下一个是5,下下一个是空
//所以head.next.next 就是5->4
head.next.next = head;
//防止链表循环,需要将head.next设置为空
head.next = null;
//每层递归函数都返回cur,也就是最后一个节点
return cur;
}
}
# 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:
if not head or head.next == None: return head
res = self.reverseList(head.next)
head.next.next = head
head.next = None
return res
以上是"LeetCode怎样反转链表"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
节点
指向
递归
指针
函数
就是
迭代
内容
条件
篇文章
两个
也就是
学习
帮助
不好
不断
动态
完了
思路
易懂
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库并发控制的大题
南开网络安全怎么样
剑侠世界三官服是那些服务器
宁夏迷优互联网科技有限公司
电子商务的网络技术风险
集中式数据库实现认证
沈阳易航网络技术有限
电信光猫无线打印服务器
淮安诚邦网络技术
西路街道网络安全培训
梦幻西游武神坛比赛服务器
新加坡国家网络安全战略
江苏运营软件开发活动简介
阿里云服务器 微信
服务器系统硬盘什么接口
软件开发系统价格
中通服网络技术有限公司
网络安全岗位设置及人员配备
中药饮片国家医保编码标准数据库
黄浦区互联网软件开发销售电话
软件开发公司总经理述职演讲
软件开发和软件维护相互关系
人工智能大数据网络安全
足球波胆分析软件开发
软件开发工程师离职
连接本地数据库所用函数是
海运数据库需求分析
越南网络安全态势
php登录判断无数据库
学校图书馆数据库