![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
链表
哎呦,帅小伙哦
这个作者很懒,什么都没留下…
展开
-
非常通俗易懂的链表判环
思路 使用快慢指针的方法,让指针fast每次走两步,指针low每次走一步。如果链表中有环,那么fast和low必相交。为什么呢?为什么快指针不会每次正好跨过慢指针???我们可以使用相对“速度”来理解快慢指针。快指针相对于慢指针,每次只移动一格,两个指针都在环里时,此时每次移动,快指针和慢指针间隔减少1;所以快指针必然会追上慢指针并重合。 那么如何找到环的入口呢??? 我们假设从链表头到环的入口处的距离是D,环的长度是S。这里假设S>D,且走的都是逆时针。当慢指针刚到入口处...原创 2020-08-01 10:07:37 · 241 阅读 · 0 评论 -
删除链表的倒数第n个节点
只遍历一遍的方法,用两个指针,让其中一个先走n步,然后两个指针同时走,等到第一个指针走到尾部,第二个指针就是要删除的节点的位置。原创 2019-09-22 22:54:21 · 48 阅读 · 0 评论 -
LeetCode 面试题 02.04 分割链表
LeetCode原创 2022-11-28 22:12:12 · 218 阅读 · 0 评论 -
LeetCode 剑指Offer || 077链表排序
LeetCode原创 2022-11-15 23:37:23 · 123 阅读 · 0 评论 -
LeetCode 430 扁平化多级双向链表
链表原创 2022-10-22 17:27:53 · 93 阅读 · 0 评论 -
LeetCode 面试题 02.05 链表求和
Leetcode原创 2022-10-20 22:40:50 · 96 阅读 · 0 评论 -
LeetCode 725 分割链表
LeetCode原创 2022-10-18 22:35:49 · 97 阅读 · 0 评论 -
LeetCode 148 链表的归并排序
代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* merge(ListNode* head1, ListNode* head2){ Lis.原创 2021-09-13 16:07:25 · 54 阅读 · 0 评论 -
LeetCode 1721 交换链表中的节点
分析链表题,按照题目思路做即可代码class Solution {public: ListNode* swapNodes(ListNode* head, int k) { ListNode* first = head; while(--k != 0) first = first -> next; ListNode* fast = first; ListNode* slow = head; while(.原创 2021-05-21 18:07:57 · 124 阅读 · 0 评论 -
使用递归方法判断回文单链表
分析这道题的难点在于,单链表无法倒着遍历,无法使用双指针技巧。容易想到的思路就是把原始链表反转存入一条新的链表,然后比较这两条链表是否相同。**其实也可以借助二叉树后序遍历的思路,不需要显式反转原始链表也可以倒序遍历链表。**因为链表也兼具这样的递归结构,链表其实也可以有前序遍历和后序遍历。void traverse(ListNode* head){ if(head == nullptr) return; traverse(head -> next); cout << hea.原创 2021-04-13 12:05:06 · 262 阅读 · 0 评论 -
K个一组反转链表
分析这个题具有递归性质,什么叫递归性质?假设我们每2个一组反转链表。我们设法把前2个节点反转,那么后面的那些节点也是一条链表,而且规模(长度)比原来这条链表小,这就是子问题。因此我们只需要把链表的前2个节点反转,然后让反转后的前两个节点中最后一个节点的next指向reverseKGroup(子问题)返回的指针即可。需要注意这道题目的base case是链表节点个数小于k的时候返回head。代码/** * Definition for singly-linked list. * struct L.原创 2021-04-12 12:15:43 · 76 阅读 · 0 评论 -
LeetCode 109 有序链表转换成二叉搜索树
思路 利用快慢指针找到链表中间节点位置,递归的建立左子树(注意建立左子树时的条件,不加语句是有问题的,考虑会出现什么问题????)和右子树。代码如下:代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Defin...原创 2020-07-29 22:03:53 · 122 阅读 · 0 评论