
链表
cx_cs
这个作者很懒,什么都没留下…
展开
-
147. 对链表进行插入排序
无原创 2023-03-07 11:22:21 · 52 阅读 · 0 评论 -
143. 重排链表
无原创 2023-03-07 11:25:53 · 150 阅读 · 0 评论 -
92. 反转链表 II
无原创 2022-08-19 09:45:03 · 85 阅读 · 0 评论 -
86. 分隔链表
无原创 2023-03-08 12:24:38 · 51 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II
无原创 2023-03-08 12:20:32 · 74 阅读 · 0 评论 -
61. 旋转链表
无原创 2023-03-08 10:34:28 · 70 阅读 · 0 评论 -
25. K 个一组翻转链表
无原创 2022-08-18 12:25:27 · 110 阅读 · 0 评论 -
237. 删除链表中的节点
要求:只给要删除的思路:把当前要删的val赋值成下一个,然后连接下下个/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void deleteNode(ListNode* node)原创 2022-04-16 18:24:45 · 892 阅读 · 0 评论 -
148. 排序链表
要求:nlogn思路:归并,快慢指针找中间class Solution {public: ListNode* sortList(ListNode* head) { return sortList(head, nullptr); } ListNode* sortList(ListNode* head, ListNode* tail) { if (head == nullptr) { return head;原创 2022-03-22 13:34:27 · 1651 阅读 · 0 评论 -
146. LRU 缓存
要求:rt思路:,双向链表+哈希struct DLinkedNode { int key, value; DLinkedNode* prev; DLinkedNode* next; DLinkedNode(): key(0), value(0), prev(nullptr), next(nullptr) {} DLinkedNode(int _key, int _value): key(_key), value(_value), prev(nullptr), ne原创 2022-03-22 12:31:50 · 68 阅读 · 0 评论 -
142. 环形链表 II
要求:起始节点思路:设环起始点距离链表开头L,环长度r,两个指针相遇时在环头前d步,则慢指针走了L+d+k1r,快指针走了L+d+k2r,则2(L+d+k1r)=L+d+k2r,化简得L+d=(k2-2k1)r,显然左右两边均是大于0的,则L=(k2-2k1)r-d,式子右边是在走了(k2-2k1-1)圈后再走r-d即从d处回到环头,式子左边是从链表头走到环头,那么解法:在快慢指针相遇后快指针每次走一步,慢指针从链表头开始走,两者首次相遇即为环头/** * Definition for singly-原创 2022-03-22 11:06:44 · 535 阅读 · 0 评论 -
23. 合并K个升序链表
要求:rt思路:法一:归并,空间O(logk)(递归栈),时间O(n*klogk)(因为分治是O(klogk),合并要O(n))/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(null原创 2022-03-17 17:09:54 · 1097 阅读 · 0 评论 -
2. 两数相加
要求:按链表顺序思路:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x原创 2022-03-16 20:13:45 · 46 阅读 · 0 评论 -
剑指 Offer 35. 复杂链表的复制
要求:除了next还有一个随机指针,复制思路:法一:递归创建/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; }};*/class Solution {public:原创 2022-03-05 21:31:13 · 56 阅读 · 0 评论 -
328. 奇偶链表
要求:奇位置放前偶放后思路:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : va原创 2021-11-22 17:35:21 · 54 阅读 · 0 评论 -
725. 分隔链表
要求:分成k份思路:两种情况,len<=k:不够用或者刚好用完,len>k没用完第一种每个放一个,不够补空,即放len/k第二种多的要放第一个位置,放len/k+len%k原创 2021-11-22 17:23:06 · 193 阅读 · 0 评论 -
234. 回文链表
要求:如题,空间O(1)思路:反转另一半,细节较多,反转要引入临时变量/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x,原创 2021-11-22 12:17:25 · 193 阅读 · 0 评论 -
445. 两数相加 II
要求:链表两数相加,不能翻转思路:不能反转就用栈/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *原创 2021-11-21 23:11:26 · 189 阅读 · 0 评论 -
24. 两两交换链表中的节点
要求:如题思路:注意最后要接上/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : v原创 2021-11-21 22:41:23 · 62 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点
要求:如题思路:这种第n个可以用快慢指针,注意头也会删,所以统一搞个新的头/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int原创 2021-11-21 22:02:36 · 69 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
要求:如题思路法一:两个一样则前指向后的后,否则移动一格/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListN原创 2021-11-21 21:45:19 · 64 阅读 · 0 评论 -
21. 合并两个有序链表
要求:如题思路法一:链表合并的特点是不用像数组一样另开空间,另外合并完一个时另一个由指针自动连接/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * L原创 2021-11-21 21:32:08 · 128 阅读 · 0 评论 -
206. 反转链表
要求:如题思路:法一:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(原创 2021-11-21 21:05:21 · 67 阅读 · 0 评论 -
160. 相交链表
要求:找第一个相交节点,时间O(n)空间O(1)思路:利用走的步数差/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(Li原创 2021-11-21 20:19:16 · 64 阅读 · 0 评论