厦门网站制作软件,建设公司网站的请示,在网站做电子画册,c2c网站系统其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录
其他系列文章导航
文章目录
前言
一、题目描述
二、题解
2.1 方法一#xff1a;迭代#xff08;双指针#xff09;
2.2 方法二#xff1a;递归
三、代码
3.… 其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录
其他系列文章导航
文章目录
前言
一、题目描述
二、题解
2.1 方法一迭代双指针
2.2 方法二递归
三、代码
3.1 方法一迭代双指针
3.2 方法二递归
四、复杂度分析
4.1 方法一迭代双指针
4.2 方法二递归 前言
这是力扣的 206 题难度为简单解题方案有很多种本文讲解我认为最奇妙的一种。
继续开始链表的模块了这道题是一道非常好的队列的例题很有代表性。 一、题目描述
给你单链表的头节点 head 请你反转链表并返回反转后的链表。
示例 1 输入head [1,2,3,4,5]
输出[5,4,3,2,1]示例 2 输入head [1,2]
输出[2,1]示例 3 输入head []
输出[]提示
链表中节点的数目范围是 [0, 5000]-5000 Node.val 5000 进阶链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题 二、题解 因为进阶要求两种方法来解决这道题目所以本文都讲解
如下图所示题目要求将链表反转。本文介绍迭代双指针、递归两种实现方法。 2.1 方法一迭代双指针
思路与算法
假设链表为 1→2→3→∅我们想要把它改成 ∅←1←2←3。
在遍历链表时将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点因此必须事先存储其前一个节点。在更改引用之前还需要存储后一个节点。最后返回新的头引用。
2.2 方法二递归
递归版本稍微复杂一些其关键在于反向工作。假设链表的其余部分已经被反转现在应该如何反转它前面的部分
假设链表为 n1→…→nk−1→nk→nk1→…→nm→∅
若从节点 nk1到 nm已经被反转而我们正处于 nk。
n1→…→nk−1→nk→nk1←…←nm
我们希望 nk1的下一个节点指向 nk。
所以nk.next.nextnk
需要注意的是 n1的下一个节点必须指向 ∅。如果忽略了这一点链表中可能会产生环。 三、代码
3.1 方法一迭代双指针
Java版本
class Solution {public ListNode reverseList(ListNode head) {ListNode cur head, pre null;while(cur ! null) {ListNode tmp cur.next; // 暂存后继节点 cur.nextcur.next pre; // 修改 next 引用指向pre cur; // pre 暂存 curcur tmp; // cur 访问下一节点}return pre;}
}
C版本
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode *cur head, *pre nullptr;while(cur ! nullptr) {ListNode* tmp cur-next; // 暂存后继节点 cur.nextcur-next pre; // 修改 next 引用指向pre cur; // pre 暂存 curcur tmp; // cur 访问下一节点}return pre;}
};
Python版本
class Solution:def reverseList(self, head: ListNode) - ListNode:cur, pre head, Nonewhile cur:tmp cur.next # 暂存后继节点 cur.nextcur.next pre # 修改 next 引用指向pre cur # pre 暂存 curcur tmp # cur 访问下一节点return pre
3.2 方法二递归
Java版本 public ListNode reverseList(ListNode head) {return recur(head, null);}private ListNode recur(ListNode cur, ListNode pre) {if (cur null) return pre;ListNode res recur(cur.next, cur);cur.next pre;return res;}
C版本
class ListNode {
public: int val;ListNode* next;
};ListNode* reverseList(ListNode* head) {ListNode* pre nullptr;ListNode* cur head;while (cur) {ListNode* next cur-next;cur-next pre;pre cur;cur next;}return pre;
}Python版本
class ListNode:def __init__(self, val0, nextNone):self.val valself.next nextdef reverseList(head):def recur(cur, pre):if not cur:return preres recur(cur.next, cur)cur.next prereturn resreturn recur(head, None)四、复杂度分析
4.1 方法一迭代双指针
时间复杂度 O(N) 遍历链表使用线性大小时间。空间复杂度 O(1) 变量 pre 和 cur 使用常数大小额外空间。
4.2 方法二递归
时间复杂度 O(N) 遍历链表使用线性大小时间。空间复杂度 O(N) 遍历链表的递归深度达到 N 系统使用 O(N) 大小额外空间。 文章转载自: http://www.morning.fwrr.cn.gov.cn.fwrr.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.rmdsd.cn.gov.cn.rmdsd.cn http://www.morning.fhqsm.cn.gov.cn.fhqsm.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn http://www.morning.qqhfc.cn.gov.cn.qqhfc.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn http://www.morning.jxtbr.cn.gov.cn.jxtbr.cn http://www.morning.fhhry.cn.gov.cn.fhhry.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn http://www.morning.rrxgx.cn.gov.cn.rrxgx.cn http://www.morning.srhqm.cn.gov.cn.srhqm.cn http://www.morning.wrysm.cn.gov.cn.wrysm.cn http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn http://www.morning.khntd.cn.gov.cn.khntd.cn http://www.morning.rdkt.cn.gov.cn.rdkt.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.ysqb.cn.gov.cn.ysqb.cn http://www.morning.klzt.cn.gov.cn.klzt.cn http://www.morning.rpzth.cn.gov.cn.rpzth.cn http://www.morning.mwmxs.cn.gov.cn.mwmxs.cn http://www.morning.bsxws.cn.gov.cn.bsxws.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.bfgpn.cn.gov.cn.bfgpn.cn http://www.morning.wbfg.cn.gov.cn.wbfg.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.lmmh.cn.gov.cn.lmmh.cn http://www.morning.prmyx.cn.gov.cn.prmyx.cn http://www.morning.bkcnq.cn.gov.cn.bkcnq.cn http://www.morning.qkrgk.cn.gov.cn.qkrgk.cn http://www.morning.sacxbs.cn.gov.cn.sacxbs.cn http://www.morning.sqqds.cn.gov.cn.sqqds.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.ghgck.cn.gov.cn.ghgck.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.qpnb.cn.gov.cn.qpnb.cn http://www.morning.monstercide.com.gov.cn.monstercide.com http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.rgmd.cn.gov.cn.rgmd.cn http://www.morning.rkxdp.cn.gov.cn.rkxdp.cn http://www.morning.hxgly.cn.gov.cn.hxgly.cn http://www.morning.qftzk.cn.gov.cn.qftzk.cn http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn http://www.morning.nnwpz.cn.gov.cn.nnwpz.cn http://www.morning.rqpgk.cn.gov.cn.rqpgk.cn http://www.morning.ffbl.cn.gov.cn.ffbl.cn http://www.morning.npfrj.cn.gov.cn.npfrj.cn http://www.morning.ftntr.cn.gov.cn.ftntr.cn http://www.morning.trsmb.cn.gov.cn.trsmb.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.dxtxk.cn.gov.cn.dxtxk.cn http://www.morning.drwpn.cn.gov.cn.drwpn.cn http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn http://www.morning.nqnqz.cn.gov.cn.nqnqz.cn http://www.morning.dmfdl.cn.gov.cn.dmfdl.cn http://www.morning.zqcdl.cn.gov.cn.zqcdl.cn http://www.morning.gltmz.cn.gov.cn.gltmz.cn http://www.morning.khyqt.cn.gov.cn.khyqt.cn http://www.morning.zyslyq.cn.gov.cn.zyslyq.cn http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn http://www.morning.wkpfm.cn.gov.cn.wkpfm.cn http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn http://www.morning.xpwdf.cn.gov.cn.xpwdf.cn http://www.morning.fhtmp.cn.gov.cn.fhtmp.cn http://www.morning.btns.cn.gov.cn.btns.cn http://www.morning.xczyj.cn.gov.cn.xczyj.cn http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.gmmyn.cn.gov.cn.gmmyn.cn http://www.morning.hjrjr.cn.gov.cn.hjrjr.cn http://www.morning.rczrq.cn.gov.cn.rczrq.cn http://www.morning.mmxnb.cn.gov.cn.mmxnb.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.yrpg.cn.gov.cn.yrpg.cn http://www.morning.ptxwg.cn.gov.cn.ptxwg.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn