![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构-链表
数据结构-链表
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode148——Sort List
题目大意:时间复杂度O(nlogn),空间复杂度O(1)对链表排序分析:满足时间空间复杂度的排序方法——非递归归并(bottom-to-up)。1个和1个合并=>2个和2个合并=>4个和4个合并,自底向上完成归并排序。代码:/** * Definition for singly-linked list. * struct ListNode { * int v...原创 2020-03-04 11:11:35 · 116 阅读 · 0 评论 -
leetcode143——Reorder List
题目大意:重排链表,比如给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.代码:class Solution {public: ListNode* helper(ListNode* head, int len) { if(len == 1) return head; i...原创 2020-02-28 12:26:34 · 98 阅读 · 0 评论 -
leetcode160——Intersection Of Two Linked Lists
题目大意:在时间复杂度O(m+n),空间复杂度O(1)的条件下找到两个链表的相交结点分析:暴力的时间复杂度为O(mn),肯定不可取。最初的思路是用哈希表记录已遍历的结点。但是空间复杂度为O(m)或O(n)。方法:双指针。p和q分别从headA和headB开始遍历,当p到尾结点(空)时,p返回指向headB;当q到尾结点(空)时,q返回指向headA。当循环遍历中p和q相遇时即为相交结点。因...原创 2020-03-06 10:29:09 · 94 阅读 · 0 评论 -
leetcode142——Linked List CycleⅡ
题目大意:找出链表入环的第一个节点,无环返回NULL分析:方法一:哈希表记录访问过的结点,leetcode141也可以采用这种方法,但是空间复杂度为O(n)。方法二:Floyd算法。第一步:先利用快慢指针判断是否有环,并拿到快慢指针相遇的结点。第二步:然后一个指针p从head出发,一个指针q从相遇结点出发,两者的相遇结点就是入环结点。第二步证明:假设head到入环节点为n步...原创 2020-02-27 12:34:54 · 122 阅读 · 0 评论 -
leetcode147——Insertion Sort List
题目大意:对链表进行插入排序代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {pu...原创 2020-03-03 09:55:56 · 124 阅读 · 0 评论 -
leetcode141——Linked List Cycle
题目大意:判断链表中是否有环分析:快慢指针相遇则有环代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class...原创 2020-02-27 11:42:47 · 110 阅读 · 0 评论 -
leetcode114——Flatten Binary Tree to Linked List
题目大意:将二叉树展开成链表。代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(...原创 2020-02-10 11:32:46 · 97 阅读 · 0 评论 -
leetcode86——Partition List
题目大意:给出链表,将其中所有小于指定元素x的所有结点移动到大于等于x的节点之前分析:链表考察。利用伪结点,指定两个指针分别指向大于等于x的元素和这个元素的前驱,遍历前者之后的所有结点,将小于x的结点插入到后者的后面。代码:class Solution {public: ListNode* partition(ListNode* head, int x) { ...原创 2018-06-03 14:05:51 · 133 阅读 · 0 评论 -
leetcode83——Remove Duplicates from Sorted List
题目大意:删除链表中的重复元素分析:考察链表的删除节点操作。遍历链表删除和前一节点数字相同的结点即可。代码:/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/cl...原创 2018-05-28 13:31:23 · 114 阅读 · 0 评论 -
leetcode82——Remove Duplicates from Sorted List II
题目大意:删除升序链表中的结点,使得链表最后只剩下从未重复过的数字分析:链表删除操作。和leetcode83不同的是这道题用到了伪结点。代码:/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : ...原创 2018-05-30 14:27:56 · 113 阅读 · 0 评论 -
leetcode61——Rotate List
题目大意:将一个单向链表向右旋转k位分析:链表的考察。简单的链表操作,先找到尾结点,将尾结点连到头结点上,然后找到合适的位置将链表断开即可。代码:转载自https://blog.csdn.net/zhangxiao93/article/details/49389623class Solution {public: ListNode* rotateRight(ListNode...原创 2018-05-02 14:54:52 · 161 阅读 · 0 评论 -
leetcode25——Reverse Nodes in k-Group
题目大意:给出一个链表,将这个链表以k个结点为一组进行翻转,不够k个的部分就保持原样不进行翻转。(比如1 2 3 4 5如果k为3就变成3 2 1 4 5)分析:链表的考察。leetcode24是这道题的特殊情况,即k=2的时候。类似于这种反转链表的题都是一个思路: 思路如下:下图是原始的单链表: 为了反转这个单链表,我们先让...原创 2018-04-10 22:23:04 · 1150 阅读 · 0 评论 -
leetcode24——Swap Nodes in Pairs
题目大意:给出一个链表,交换链表中相邻的两个节点分析:链表的考察。在纸上画草图比较清楚。下面有两种思路。代码:自己的方法:class Solution {public: ListNode* swapPairs(ListNode* head) { if(head == NULL || head->next == NULL) return head;L...原创 2018-04-10 22:08:11 · 114 阅读 · 0 评论 -
leetcode92——Reverse Linked List II
题目大意:反转链表中的第m到第n个结点分析:链表操作。代码:/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/clas...原创 2018-06-14 17:26:03 · 132 阅读 · 0 评论 -
leetcode234——Palindrome Linked List
题目大意:判断链表是否是回文链表,要求时间复杂度O(n),空间复杂度O(1)。分析:三步走。第一步:利用快慢指针找到中间结点(奇数个slow指向中间结点,偶数个slow指向前半段的尾结点)。第二步:反转slow之后的结点,fast指向slow->next。此时slow相当于pre,fast相当于head。参照leetcode206。第三步:判断前后两段是否相同。代码:...原创 2020-03-13 10:36:02 · 96 阅读 · 0 评论 -
leetcode206——Reverse Linked List
题目大意:反转链表代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:...原创 2020-03-08 11:12:55 · 92 阅读 · 0 评论 -
leetcode19——Remove Nth Node From End of List
题目大意:删除给出链表的倒数第n个结点分析:链表的考察代码:转载自https://blog.csdn.net/xm1991happy/article/details/51829541/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;...原创 2018-04-08 22:36:46 · 143 阅读 · 0 评论 -
leetcode2——Add Two Numbers
题目大意:给出两个链表,反过来之后分别代表两个整数,比如2->4->3(342),5->6->4(465),结果返回一个链表,代表所给两个链表之和分析:链表的考察。需要掌握链表的建立。代码:/*** Definition for singly-linked list.* struct ListNode {* int val;* ...原创 2018-04-03 15:52:20 · 123 阅读 · 0 评论 -
leetcode23——Merge k Sorted Lists
题目大意:将K个升序的链表整合成一个分析:链表、堆、分治归并的考察。最简单的方法就是取出K个链表中的最小值加入答案,最小值用堆(优先级队列)来维护。cmp函数讲解参考https://blog.csdn.net/ly59782/article/details/53161358。第二种方法就是分治的思想,利用leetcode21里面的代码,两两不断合并,最终成为一个链表。代码:方法一:...原创 2018-04-10 20:53:46 · 100 阅读 · 0 评论