- 博客(9)
- 收藏
- 关注
原创 Leetcode-235. Lowest Common Ancestor of a Binary Search Tree
一种复杂的方法:首先将从根节点到p,q两节点的路径上的结点压入栈中,处理两个栈使栈容量保持一致,同时弹出两栈中的元素,直至两栈栈顶元素相同。 class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { stack s1,s2;
2017-01-31 21:09:57 255
原创 Leetcode-138. Copy List with Random Pointer
解题思路一:使用hashmap保存原链表节点的地址,和新链表中对应节点地址。第一次对原链表进行遍历同时初始化新链表。第二次对原链表进行遍历,同时对新链表中节点的random指针进行赋值。时间复杂度为O(n),空间复杂度为O(n)。 /** * Definition for singly-linked list with a random pointer. * struct Rando
2017-01-24 21:08:15 715
原创 Leetcode- 143. Reorder List
解题思路:使用快慢指针找到链表的中间位置(代码需要写的非常小心)。对于后半部分的链表逆序(如果不使用哑节点dummy方法,需要在之前判断链表元素个数小于1时直接返回。) /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * L
2017-01-24 10:08:33 268
原创 Leetcode-61. Rotate List
解题思路:统计链表长度后,找到新链表首元素的位置。断开旧链表,链接新链表 class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if(head==NULL) return head; ListNode *left = head,*right =
2017-01-23 18:38:41 282
原创 Leetcode-23. Merge k Sorted Lists
解题思路:思路很简单。因为vector容器支持不停的取出和放回操作。所以可以每次取出两个链表,合并好之后再放回。当然,前提是vector中的元素数目多于1。元素数目等于一时即为所求的链表。不过这题的坑点是vector的访问与删除操作,见下面四种解法。 方法一: Runtime: 243 ms ListNode* mergeKLists(vector& lists) {
2017-01-23 02:23:07 185
原创 Leetcode-86. Partition List
解题思路:使用两个节点保存切分后的俩链表。最后再合并到一起。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class S
2017-01-23 01:13:26 223
原创 LeetCode-148. Sort List
做题思路:先使用快慢指针确定链表的中间位置(注意慢指针的位置)。再对两个链表递归调用排序,最后再合并两个已排好序的单链表。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x)
2017-01-23 00:50:05 220
原创 LeetCode-2 && 445. Add Two Numbers I && II
解题思路: 两链表中长度较长的一条作为存储结果的链表,假设第一条链表的长度较长。需要考虑链表长度不等的三种情况。其中第一条链表的长度小于第二条时,需要连接第一条链表和第二条链表多出来的尾巴,所以在进行后向遍历时需要有一个prev指针——同时这个prev指针在两链表长度一致时也可以保存多出来的进位(假如有的话)。 class Solution { public: ListNode
2017-01-21 21:19:58 295
原创 LeetCode-141. Linked List Cycle
思路:双指针法,设置快慢双指针。假如有环,快指针一定会和慢指针相遇。假如无环,快指针一定首先到达链表尾部。 bool hasCycle(ListNode *head) { ListNode *slow = head; ListNode *fast = head; while(fast !=NULL){ slo
2017-01-18 21:10:27 287
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人