当前位置: 首页 > wzjs >正文

北京网站建设公司价格dw怎么做别人可以看的网站

北京网站建设公司价格,dw怎么做别人可以看的网站,如何制作简单网页,网站开发的需要的技术人员Leetcode 206: 反转链表 这是一道非常经典的链表操作题目,要求熟练掌握链表的遍历与指针操作。反转链表是面试中经常出现的题目之一,也是链表题目的基本方法题。 题目描述 输入:一个链表的头节点 head。输出:反转后的链表&#…

Leetcode 206: 反转链表

这是一道非常经典的链表操作题目,要求熟练掌握链表的遍历与指针操作。反转链表是面试中经常出现的题目之一,也是链表题目的基本方法题。


题目描述

  • 输入:一个链表的头节点 head
  • 输出:反转后的链表,即将链表中所有的指针方向进行翻转,最后返回新的头节点。

示例

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]输入:head = []
输出:[]

解法 1:迭代法 (双指针)

思路

  1. 使用双指针方法遍历链表:
    • 一个指针 prev 表示反转后链表的头节点;
    • 另一个指针 curr 指向当前节点。
  2. 反转操作:
    • 每次用 curr.next = prev 更新指针,反转当前节点与前驱节点之间的指针连接;
    • 然后将两个指针分别向后移动:prev = currcurr = next
  3. 返回链表的新头节点,即左移到最后的 prev 指针。

代码模板

class Solution {public ListNode reverseList(ListNode head) {ListNode prev = null; // 反转后链表的头,初始为 nullListNode curr = head; // 当前节点// 遍历链表while (curr != null) {ListNode next = curr.next; // 保存当前节点的下一个节点curr.next = prev;         // 反转指针连接prev = curr;              // 移动 prev 指针curr = next;              // 移动 curr 指针}return prev; // 最终 prev 成为新的头节点}
}

复杂度分析

  • 时间复杂度:O(n)
    • 遍历链表一次,操作与链表长度成线性关系。
  • 空间复杂度:O(1)
    • 仅使用两个指针,没有额外空间。

解法特性

  • 优点:代码清晰,适合面试时快速实现,也是此类问题的首选解法。
  • 适用场景:链表中无额外附加条件,线性处理。

解法 2:递归法

思路

  1. 利用函数的递归调用来构造链表的反转。
  2. 递归终止条件
    • 当前节点为 null 或到达链表的尾节点,此时返回该节点作为新的头节点。
  3. 递归返回阶段
    • 将下一节点的 next 指针指回当前节点(即 head.next.next = head),反转当前节点的指针;
    • 当前节点的 next 更新为 null,从而断开后续链表。

递归返回后,新头节点会逐层归还至上层调用。


代码模板

class Solution {public ListNode reverseList(ListNode head) {// 递归终止条件,返回新的头节点if (head == null || head.next == null) {return head;}// 递归反转子链表ListNode newHead = reverseList(head.next);// 反转当前节点与下一节点之间的指针head.next.next = head;head.next = null;return newHead; // 返回新的头节点}
}

复杂度分析

  • 时间复杂度:O(n)
    • 每个节点仅被访问一次。
  • 空间复杂度:O(n)
    • 递归调用栈的深度为链表长度,最坏情况下占用 O(n) 的额外空间。

解法特性

  • 优点:代码更加简洁,适用于强调递归能力的题目或比赛。
  • 缺点:如果链表过长,递归调用可能导致栈溢出。

解法 3:头插法

思路

  1. 采用头插法构造反转链表:
    • 使用一个新链表,将原链表的每个节点依次插入到新链表的头部。
  2. 操作步骤:
    • 遍历原链表,将当前节点插入新链表的头部。
    • 通过头插法不断更新反转后的链表头节点。

代码模板

class Solution {public ListNode reverseList(ListNode head) {ListNode newHead = null; // 新链表的头节点while (head != null) {ListNode next = head.next; // 保存原链表的下一个节点head.next = newHead;       // 当前节点插入到新链表的头部newHead = head;            // 更新新链表的头节点head = next;               // 移动到原链表的下一个节点}return newHead; // 返回新链表的头节点}
}

复杂度分析

  • 时间复杂度:O(n)
    • 遍历链表一次。
  • 空间复杂度:O(1)
    • 原地修改指针,无需额外的栈空间。

解法特性

  • 优点:实现过程清晰直观,指针操作较简单。
  • 缺点:需要关联到新链表概念,与解法 1 类似,但不直接操作原链表头节点。

解法 4:栈

思路

  1. 利用栈的 后进先出 (LIFO) 特性存储链表节点。
  2. 遍历链表时依次将所有节点压入栈。
  3. 依次弹出栈构造新的链表。

代码模板

import java.util.Stack;class Solution {public ListNode reverseList(ListNode head) {Stack<ListNode> stack = new Stack<>();while (head != null) {stack.push(head);head = head.next;}// 构造新的反转链表ListNode dummy = new ListNode(0);ListNode curr = dummy;while (!stack.isEmpty()) {curr.next = stack.pop();curr = curr.next;}curr.next = null; // 手动置尾节点的 next 为 nullreturn dummy.next;}
}

复杂度分析

  • 时间复杂度:O(n)
    • 遍历链表、压栈和弹栈操作均是线性时间。
  • 空间复杂度:O(n)
    • 需要栈记录链表的所有节点。

解法特性

  • 优点:逻辑清晰,适用于对栈操作理解较深的场景。
  • 缺点:需要额外的空间存储链表节点。

快速 AC 策略

首选解法:迭代法 (解法 1)

  • 时间复杂度 O(n)、空间复杂度 O(1),实现简单,高效且稳定。
  • 是处理链表反转问题时的优先选择解法,也是面试中常见测试的重点。

递归法适用场景:解法 2

  • 在面试或竞赛中,如果面试官特别要求递归实现,采用递归法。
  • 注意链表过长可能导致栈溢出的隐患。

特殊场景的备选方案

  • 如果需要展示对其他数据结构的掌握,可以选择 栈实现(解法 4)。
  • 头插法(解法 3)本质上是迭代法的变化形式,更适合训练链表的插入操作。

总结:链表反转的核心技巧

  1. 头节点问题:学会用双指针处理头节点的指针反转。
  2. 指针操作熟练度:能快速写出 prev, curr, next 的正确更新逻辑。
  3. 递归与迭代的切换:递归实现清晰,但更需要对栈操作有深刻理解。

熟练掌握以上解法,可以确保在任何场景中快速 AC 本题!


文章转载自:

http://dFzuNsKO.sytzq.cn
http://Fy2nkUr3.sytzq.cn
http://r3STJ6nO.sytzq.cn
http://vRAoSPYI.sytzq.cn
http://EDlDnDOJ.sytzq.cn
http://YUERGDyc.sytzq.cn
http://VISOrTIs.sytzq.cn
http://UWDQPYBA.sytzq.cn
http://AwN5CWVE.sytzq.cn
http://F43LHWg6.sytzq.cn
http://Pep5lI97.sytzq.cn
http://Z3ZMHZ1n.sytzq.cn
http://vMAFezD6.sytzq.cn
http://05H1PY4z.sytzq.cn
http://pgH7vWlk.sytzq.cn
http://ge4aqbSX.sytzq.cn
http://U8evgxje.sytzq.cn
http://qCxzTKgN.sytzq.cn
http://zl0QOjGs.sytzq.cn
http://jiuH6yWJ.sytzq.cn
http://H56f3UqH.sytzq.cn
http://dICUYTKB.sytzq.cn
http://z5BejuoO.sytzq.cn
http://d0S85Qwx.sytzq.cn
http://d6EIWSHs.sytzq.cn
http://ktdLBmBi.sytzq.cn
http://ihY7Y7sL.sytzq.cn
http://xemxP4l0.sytzq.cn
http://GSMl4KXm.sytzq.cn
http://iS1Az33n.sytzq.cn
http://www.dtcms.com/wzjs/773426.html

相关文章:

  • 龙岩网站建设行情关于医院网站建设的通知
  • 同城网站开发网站建设需要会什么软件有哪些
  • 网站关键字挖掘陕西启康建设有限公司网站
  • 商城网站开发那家好wordpress模板内容页哪个文件
  • 有专门做网站的公司ios开发者网站
  • 电子商务网站服务器郑州市建筑企业服务中心官网
  • 网站推广建设费各个国家的google网站
  • 个人soho要怎么做企业网站电子网站建设
  • 网站建设模范代码10年中文域名注册多少费用
  • 网站建设规划书摘要500字工业软件开发流程
  • 金融网站排名优化南京网站优化方案
  • 怎么用ip访问vps网站网站的建设求职简历
  • 怎么上传做 好的网站建站公司费用情况
  • 珠海网站建设方案报价程序员外包公司有哪些
  • 成品网站制作公司能够免费换友链的平台
  • 商丘网站制作报价信赖赛憬科技微信公众号功能模块
  • 有哪些图片设计网站有哪些问题礼品公司网站模板
  • 建筑企业招聘网站米拓网站建设步骤
  • 佛山网站定制开发怎么在自己做的网站上发视频
  • 黑河做网站公司成都二次感染最新消息
  • 郴州网站优化公司影视制作宣传片公司
  • 太原网站建设的公司排名银川网站建设推广
  • 东莞做网站费用wordpress注入工具
  • 黑龙江网站建设企业h5免费制作平台火蚁邀请函怎么写
  • 企业网站开发协议中小企业网站建设报告
  • 域名注册是什么意思呢北京专业seo
  • 网页制作作业下载中国seo谁最厉害
  • 装修网站模板寮步网页设计
  • 用jsp做婚纱网站的流程网站建设制作模板
  • 滨州网站建设哪家专业厦门微网站建设