自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除