| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 代码随想录算法训练营第四天|24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II -> 正文阅读 |
|
[数据结构与算法]代码随想录算法训练营第四天|24. 两两交换链表中的节点 ,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表II |
一、24. 两两交换链表中的节点思路1:虚拟头节点。 ????????1、对相邻的节点进行两两交换,首先添加虚拟头节点更好方便处理节点。head指向遍历节点,prev指向遍历节点的前置节点。
? ? ? ? 2、循环条件很简单,判断至少有两个节点,才好交换。while(prev.next != null && prev.next.next != null )。 ? ? ? ? 3、进行交换,首先得保存后继节点吧,所以 ListNode temp = head.next.next; // 缓存 next? ? ? ? ? 4、然后交换1 2节点,prev.next = head.next; // 将 prev 的 next 改为 head 的 next ????????????????????????head.next.next = head; // 将 head.next(prev.next) 的next,指向 head? ????????5、2号节点的后继应该是1的后继,head.next = temp;// 将head 的 next 接上缓存的temp 。 ? ? ? ? 6、交换1 2 完成,接下来要交换3 4,temp应该指向5,head指向3,prev指向2。 ????????????????prev = head; // 步进1位 ????????????????head = temp; // 步进1位
?思路2: 递归,使用递归三部曲。
递归可以参考一下大佬写的一个博客,附有详细的图文介绍:三道题套路解决递归问题 | lyl's blog 二、19.删除链表的倒数第N个节点????????思路:此题难度一般,倒数第n个,使用快慢指针让快指针先走n个节点,然后再一起遍历,最后慢指针就是倒数第n个节点,删除节点顺便定义前置节点。结束了
三、面试题 02.07. 链表相交思路:同样可以使用双指针,分别统计A B链表的长度,让较长链表先走链表之差个节点,然后再一起遍历,就可以找到相交节点。
四、142.环形链表II?思路1:使用快慢指针找是否存在环比较容易,这是因为fast是走两步,slow是走一步,其实相对于slow来说,fast是一个节点一个节点的靠近slow的,所以fast一定可以和slow重合,难点在于如何找到环的入口。 ????????假设从头结点到环形入口节点 的节点数为x。 环形入口节点到 fast指针与slow指针相遇节点 节点数为y。 从相遇节点 再到环形入口节点节点数为 z。 如图所示: ?????????那么相遇时: slow指针走过的节点数为:? ????????将x单独放在左面: ????????再从n(y+z)中提出一个 (y+z)来,整理公式之后为如下公式: ????????当 n为1的时候,公式就化解为? ????????这就意味着,从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是环形入口的节点。
思路2: 有环肯定是后续节点指向了前面的节点了,使用set集合来判断是否有环。(Set注重独一无二的性质,该集合可以知道某物是否已经存在于集合中,不会存储重复的元素) ? ? ? ? 使用不会重复这个特性,遍历链表依次将节点存入Set集合中,? 如果遍历重复节点则表示有环。
? ? 这里顺便复习一下Java的各种集合,链接如:Java集合详解 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:42:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |