LC链表
链表
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
LeetCode 92. 反转链表 II
92. 反转链表 IIclass Solution {public: ListNode *reverseBetween(ListNode *head, int left, int right) { // 设置 dummyNode 是这一类问题的一般做法 ListNode *dummyNode = new ListNode(-1); dummyNode->next = head; ListNode *pre = dummyNod原创 2021-03-18 11:58:24 · 63 阅读 · 0 评论 -
LeetCode 82. 删除排序链表中的重复元素 II 83. 删除排序链表中的重复元素
82. 删除排序链表中的重复元素 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 *next)原创 2021-03-04 13:50:32 · 104 阅读 · 1 评论 -
LeetCode 61. 旋转链表
旋转链表/** * 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), next(原创 2021-02-28 23:37:50 · 59 阅读 · 0 评论 -
LeetCode 剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点class Solution {public: ListNode* deleteNode(ListNode* head, int val) { if(head == nullptr || head->next==nullptr) return nullptr; if(head->val == val) return head->next; ListNode *pre = nullptr, *原创 2021-01-19 21:19:50 · 73 阅读 · 0 评论 -
LeetCode 剑指 Offer 52. 两个链表的第一个公共节点 (思维题)
两个链表的第一个公共节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode getIn原创 2021-01-18 10:28:29 · 56 阅读 · 0 评论 -
LeetCode 148. 排序链表 (归并排序、自顶而下、自底而上)
归并排序,时间复杂度:O(n∗logn)O(n*logn)O(n∗logn)自顶而下,空间复杂度:O(log)O(log)O(log)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(原创 2021-01-17 22:55:43 · 77 阅读 · 0 评论 -
LeetCode 237. 删除链表中的节点(思维)
237. 删除链表中的节点class Solution {public: void deleteNode(ListNode* node) { node->val = node->next->val; node->next = node->next->next; }};原创 2021-01-16 16:27:08 · 57 阅读 · 0 评论 -
LeetCode 420 扁平化多级双向链表 (深搜、双向链表)
扁平化多级双向链表class Solution { // 头部哑结点 Node header = new Node(); Node cur; public Node flatten(Node head) { if(head == null) return null; cur = header; helper(head); // 第一个节点的前驱必须为空 header.next.prev = nu原创 2021-01-16 14:16:19 · 74 阅读 · 0 评论 -
LeetCode 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) : val(x), next(原创 2020-11-13 00:37:38 · 61 阅读 · 0 评论 -
LeetCode 143. 重排链表 (快慢指针、反转链表、合并链表)
143. 重排链表这题算是把三个easy题并一块了。/** * 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原创 2020-10-20 19:09:48 · 283 阅读 · 0 评论 -
LeetCode 116. 117 填充每个节点的下一个右侧节点指针 (小巧的递归、链表+二叉树)
116 填充每个节点的下一个右侧节点指针使用额外空间很好做递归写法class Solution {public: Node* connect(Node* root) { dfs(root,nullptr); return root; } void dfs(Node* cur,Node* nxt){ if(!cur) return; cur->next = nxt; dfs(cur->l原创 2020-10-15 18:12:52 · 79 阅读 · 0 评论 -
LeetCode 142. 环形链表 II (快慢指针、同余)
环形链表 II这题出的很有意思,不错不错对环的指针判定和同余关系的利用很有意思。相遇方程a+b+n∗(b+c)≡(a+b)mod (b+c)a+b+n*(b+c) \equiv (a+b) \mod(b+c)a+b+n∗(b+c)≡(a+b)mod(b+c)距离方程a+b+n∗(b+c)=2∗(a+b)a+b+n*(b+c) =2*(a+b)a+b+n∗(b+c)=2∗(a+b)得出:a=c+(n−1)∗(b+c)a=c+(n-1)*(b+c)a=c+(n−1)∗(b+c)即:a≡cm原创 2020-10-10 15:27:26 · 95 阅读 · 0 评论 -
LeetCode 141. 环形链表 (快慢指针)
环形链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) { bool flag = false;原创 2020-10-09 00:29:52 · 76 阅读 · 0 评论 -
LeetCode 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原创 2020-10-04 21:42:01 · 190 阅读 · 0 评论 -
LeetCode 剑指 Offer 24. 反转链表 206. 反转链表(迭代、递归)
剑指 Offer 24. 反转链表链表节点的头插/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) {原创 2020-09-26 22:26:59 · 89 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表 (链表、堆、分治)
23. 合并K个升序链表堆k路归并问题时间复杂度:O(kn∗log(k))O(kn*log(k))O(kn∗log(k))/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {private:原创 2020-09-17 22:47:52 · 98 阅读 · 0 评论 -
LeetCode 合并有序线性数据结构(88. 合并两个有序数组 、21. 合并两个有序链表、23. 合并K个排序链表 )
88. 合并两个有序数组双指针class Solution {public: void merge(vector<int>& a1, int m, vector<int>& a2, int n) { vector<int> temp; int i=0,j=0; while(i<m || j<n){ if(i<m && j<n){原创 2020-08-03 20:00:46 · 101 阅读 · 0 评论 -
LeetCode 面试题 02.01. 移除重复节点 (哈希表、链表节点的删除、内存的释放)
移除重复节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool vis[20010] = {0}; ListNode* removeDuplicateNodes(Lis原创 2020-06-26 05:59:08 · 169 阅读 · 0 评论