随笔分类 -  AL_Linked List

摘要:203. 移除链表元素 题意 删除链表中等于给定值 val 的所有节点; 解题思路 把下个结点的值赋值给当前结点,删除下一个结点; 增加一个多余的头结点,方便记录下前结点,将前结点指向下个结点,删除当前结点; 实现 阅读全文
posted @ 2019-03-26 09:12 banananana 阅读(199) 评论(0) 推荐(0) 编辑
摘要:19. 删除链表的倒数第N个节点 题意 删除链表的倒数第N个结点 解题思路 先让快结点移动n个位置,接着再让慢结点和快结点同时移动,发现出慢结点就是要删除的结点,将前结点指向删除结点的下一个结点即可; 实现 阅读全文
posted @ 2019-03-26 06:28 banananana 阅读(179) 评论(0) 推荐(0) 编辑
摘要:237. 删除链表中的节点 题意 删除给定的链表结点; 解题思路 其实是删除下一个结点,具体做法为将下一个链表的值赋值给当前的删除结点,并且将当前结点指向下下个结点;循环链表,不断的将下一个结点的值赋值给当前结点(需要注意删除的是尾部结点,因为题目提示说不会这么做所以就不用处理,其实也无法处理。。。 阅读全文
posted @ 2019-03-25 09:26 banananana 阅读(233) 评论(0) 推荐(0) 编辑
摘要:141. 环形链表 题意 判断链表中是否有环; 提升: 空间复杂度为O(1) 解题思路 标记链表结点是否已经访问过(通过Python的属性很容易实现);使用集合记录下访问过的结点的id;慢结点每次走一步,快结点每次走两步,如果存在环的话两者肯定会相逢(考点!!); 标记链表结点是否已经访问过(通过P 阅读全文
posted @ 2019-03-25 08:30 banananana 阅读(219) 评论(0) 推荐(0) 编辑
摘要:2. 两数相加 题意 倒序的数字进行相加; 解题思路 数字进行倒序还算是简单的,因为我们正常的运算也是从按照这个顺序,正好可以方便计算; 实现中的两个方法是一样的,不太懂为啥下面的运行时间查这么多; 实现 提升 如果这个链表存储的数字的顺序是正常的话,那么有两种方法: 将链表进行倒序,接着就和上面的 阅读全文
posted @ 2019-03-22 10:00 banananana 阅读(229) 评论(0) 推荐(0) 编辑
摘要:143. 重排链表 题意 给定一个单链表 L:L0→L1→…→L**n-1→Ln , 将其重新排列后变为: L0→L**n→L1→L**n-1→L2→L**n-2→… 并且需要实际的进行节点交换; 解题思路 拆分成两条链表:找到中间的结点;将链表拆分成左右两条链表,并且将右边的链表进行反转;将左右两 阅读全文
posted @ 2019-03-21 17:19 banananana 阅读(388) 评论(0) 推荐(0) 编辑
摘要:817. 链表组件 题意 求链表中一段最长连续结点的值(值必须出现在列表G中,不要求顺序)构成的集合的个数; 解题思路 一开始还以为是要求顺序的,想说用递归来做,发现链表的值只是出现在列表中而已,因此判断链表中的值出现在列表中的次数(连续不算)即可,有点类似移动窗口的思路; 下面的实现是优化了几次, 阅读全文
posted @ 2019-03-21 10:55 banananana 阅读(252) 评论(0) 推荐(0) 编辑
摘要:328. 奇偶链表 题意 奇数的链表结点插在偶数的链表结点前面; 解题思路 维护两条链表,分别记录下奇数和偶数的链表结点,最后将偶数链表的起始结点连接到奇数链表的末尾结点后面; 实现 阅读全文
posted @ 2019-03-21 10:11 banananana 阅读(312) 评论(0) 推荐(0) 编辑
摘要:24. 两两交换链表中的节点 题意 两两交换链表中的结点 解题思路 递归找终止条件:本题终止条件很明显,当递归到链表为空或者链表只剩一个元素的时候,没得交换了,自然就终止了。找返回值:回给上一层递归的值应该是已经交换完成后的子链表。单次的过程:因为递归是重复做一样的事情,所以从宏观上考虑,只用考虑某 阅读全文
posted @ 2019-03-17 19:51 banananana 阅读(298) 评论(0) 推荐(0) 编辑
摘要:109. 排序链表 题意 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 解题思路 常数集空间复杂度:将其转化为数组; 时间复杂度为O(nlogn):用归并排序; 实现 阅读全文
posted @ 2019-03-16 14:52 banananana 阅读(194) 评论(0) 推荐(0) 编辑
摘要:92. 反转链表 II 思路:将中间的链表进行反转,然后前后进行连接,需要注意有前结点和没有前结点的情况。class Solution(object): def reverseBetween(self, head, m, n): """ :type head: ListNode :type m: i 阅读全文
posted @ 2017-09-15 18:32 banananana 阅读(131) 评论(0) 推荐(0) 编辑
摘要:160. 相交链表 题意 找到两个单链表相交的起始节点。 解题思路 分别计算两条链表的长度,接着先让长的链表走两者距离的差,然后再和短的链表一起走,在过程中判断它们的交集。 实现 阅读全文
posted @ 2017-09-15 17:35 banananana 阅读(153) 评论(0) 推荐(0) 编辑
摘要:82. 删除排序链表中的重复元素 II 题意 和1不同的是,1只删除一个重复数字,但是在2中需要删除所有含有重复数字的节点。 解题思路 我直接重新构造了一颗新的链表,没有在原链表的基础之上进行操作; 实现 当然你也可以在原来链表的基础之上进行更改,如下: 阅读全文
posted @ 2017-09-15 16:35 banananana 阅读(110) 评论(0) 推荐(0) 编辑
摘要:83. 删除排序链表中的重复元素 题意 删除排序链表中的重复元素 解题思路 题目已经限定了是排好序的链表,那么就需要特殊处理一下可能会出现连续的情况,找到起始结点和结束结点删除即可; 实现 阅读全文
posted @ 2017-09-15 15:32 banananana 阅读(114) 评论(0) 推荐(0) 编辑
摘要:86. 分隔链表 题意 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。并且需要保留两个分区中每个节点的初始相对位置。 解题思路 用两个数组分别把小于和大于的都保存下来,然后依照顺序来创建链表;在原来的链表的基础上操作;创建新的结点; 用两个数组 阅读全文
posted @ 2017-09-11 22:28 banananana 阅读(112) 评论(0) 推荐(0) 编辑
摘要:61. 旋转链表 题意 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数; 解题思路 快的先移动k个结点,然后再让慢的和快的一起移动,最后慢的就可以到达倒数第k个结点,最后将快的指向慢的即可,然后再移动这里需要注意的是,如果k超出链表长度的话,有两种情况,如果是能整除的 阅读全文
posted @ 2017-09-11 21:32 banananana 阅读(126) 评论(0) 推荐(0) 编辑
摘要:234. 回文链表 题意 判断链表是否是回文串; 解题思路 将链表中的值加入到数组中,然后比较回文串,但是这有个缺点,就是需要花费数组的空间。 实现 如果是不需要额外的空间,那么可以让链表前半部倒置,让两个指针分别朝着前后两个方向移动,如果不相等则退出。 阅读全文
posted @ 2017-09-11 20:36 banananana 阅读(89) 评论(0) 推荐(0) 编辑
摘要:142. 环形链表2 题意 在存在环的情况下,找出环的起点位置; 解题思路 先找到环中相遇的地方,然后让其中一方从起始位置移动,一方从相遇位置移动,双方相遇的时候就是环的起点; 证明图如下: 证明可参考这里 简化代码 阅读全文
posted @ 2017-09-07 09:53 banananana 阅读(81) 评论(0) 推荐(0) 编辑
摘要:109. 有序链表转换二叉搜索树 回溯 这里比较难的点在于,如何去区分左子树和右子树,因为不可能像数组那样简单的分片操作,那么可以使用变量标记起始和终点即可。 或者把回调函数提取出来: 然后也可以将链表转化成数组,变成控制数组的左右区间,然后再进行操作: 阅读全文
posted @ 2017-09-05 23:31 banananana 阅读(132) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示