LinkedList
文章平均质量分 77
bsbcarter
这个作者很懒,什么都没留下…
展开
-
Leetcode-Intersection of Two Linked Lists
For example, the following two linked lists:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3begin to intersect at原创 2015-02-24 06:31:01 · 298 阅读 · 0 评论 -
*LeetCode-Course Schedule II
烦死了!!!怎么那么多错!!先是如果用matrix存 那么后来每次都要扫一遍特定一个pre的这一行或一列 慢 超时了然后如果用map《int list》存 就不会访问不存在的边然后就发现需要判断那个list是否为null 这里要用continue!!!不是break!!!public class Solution { public int[] findOrder(int原创 2015-10-01 06:45:25 · 243 阅读 · 0 评论 -
LeetCode-Delete Node in a Linked List
这道题并没有给list的head,想了很久如何access要删除的node的前一个。 看了答案后知道可以把这个node之后的每个节点依次assign成下一个的值 就像array/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; *原创 2015-09-14 22:17:30 · 301 阅读 · 0 评论 -
*LeetCode-Sort List
linked list简直了 two pointer的事情还需要联系这次忘记每次要判断head是否null 或者就一个node 先返回然后就是找到中间 break开 然后分别sort这两个 再mergemerge不需要新空间!!一个新的head 两个指针分别指向两个sublist的头 一个一个比 然后挪动指针就行了!!然后最后把剩下的加上去 记得dummy的事情public cla原创 2015-10-01 03:34:40 · 275 阅读 · 0 评论 -
LeetCode-Reverse Linked List
直接的从第一个node开始 记录一下 下一个node 然后就开始挪动当前node的指针 记得要把最开始的node.next = nullpublic class Solution { public ListNode reverseList(ListNode head) { if ( head == null || head.next == null )原创 2015-09-16 03:47:51 · 240 阅读 · 0 评论 -
*LeetCode-Zigzag Iterator
很笨的把两个list当数组用了 还把list复制了一遍list自己的iterator就可以了 而且有个很好的方法就是两个iterator每次swap就可以了 不用判断上个是输出的谁 public class ZigzagIterator { Iterator it1, it2; public ZigzagIterator(List v1, List v2) {原创 2015-10-21 07:35:39 · 333 阅读 · 0 评论 -
*LeetCode-Copy List with Random Pointer
random的指针不知道指向这个list中的哪一个 或者null 所以假如简单的复制一个平行的list是不可以的 比如random指向一个还未被复制的node 或者指向一个无法再track回去的node算法分三步1.把list每个node复制之后放在原node之后 连成一个list 2.从头至尾把copy的random指针弄好 3. 把list拆开/** * Definition for原创 2015-10-07 09:54:47 · 255 阅读 · 0 评论 -
*LeetCode-Remove Linked List Elements
怎么连这个也做不对了前一个指针 后一个指针 后面那个用来记录previous,记得最开始设置为dummy headpublic class Solution { public ListNode removeElements(ListNode head, int val) { if ( head == null ) return head;原创 2015-09-17 03:03:42 · 240 阅读 · 0 评论 -
LeetCode-Reverse Nodes in k-Group
直接数了个数 算了要做几个reverse 然后直接做的可以优化的就是不需要数有多少个 每次累加到够了k就做一次 其实差不多/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val原创 2015-10-07 10:44:23 · 227 阅读 · 0 评论 -
*LeetCode-Convert Sorted List to Binary Search Tree
inorder就是顺序的一个linked list每次找到list的中间 就是root 左边sub list中间就是左子 右边sub list的中间就是右子但是注意只有一个node的情况 要把head设置成null 而且每次找到mid之后 要把mid之前的那个node.next = nullpublic class Solution { public TreeNode sor原创 2015-09-28 23:03:01 · 269 阅读 · 0 评论 -
LeetCode-Partition List
这个题想起来不难 就是需要注意细节 linkedlist 题都需要一个dummy head 来记录新的head dummy head永远next指向新的 head, 需要一个位置指针初始化的时候和dummy 一样 然后在后面某次移动这个位置指针的时候 dummy也就被移动到了正确的head 返回值就是dummy.next/** * Definition for singly-linked原创 2015-09-23 05:08:12 · 240 阅读 · 0 评论 -
*LeetCode-Reorder List
这个题分三步 但是每一步都很多细节 第一步找到中间 第二步把后半部分reverse 第三步将这两部分按顺序链接注意第一部分第二部分break开 然后注意后面的head一开始设置成null 再翻转然后就是连接的时候 注意停止条件public class Solution { public void reorderList(ListNode head) { if原创 2015-10-01 04:03:18 · 240 阅读 · 0 评论 -
LeetCode-Insertion Sort List
记清insertion sort 的方法然后就是dummy!!!public class Solution { public ListNode insertionSortList(ListNode head) { if ( head == null || head.next == null ) return head; Lis原创 2015-09-28 02:17:32 · 208 阅读 · 0 评论 -
*LeetCode-Palindrome Linked List
翻转first half 然后一个从中间向前 一个向后 进行对比我自己写的把找到中间和翻转写成了两步 很多错 很麻烦 其实可以写到一起public class Solution { public boolean isPalindrome(ListNode head) { if ( head == null || head.next == null )原创 2015-09-28 00:54:16 · 225 阅读 · 0 评论 -
LeetCode-Binary Tree Level Order Traversal II
唯一和上一个题不同的就是要倒序输出层,从底层开始。只需要改一个小地方就是最后将每层list add到大list时候,用add(0,list),即add到第一位。public class Solution { public List> levelOrderBottom(TreeNode root) { Queue que = new LinkedList();原创 2015-03-07 23:08:32 · 299 阅读 · 0 评论 -
LeetCode-Remove Nth Node From End of List
两个pointer,这种无法知道linkedlist size的,(给的是自己定义的 list node) 却要从后往前数的,就需要两个指针,在开始就让他们以前以后相差n,然后一同向后,当前面那个fast的到达末尾的时候,slow正好就到了倒数第n个的前一个。public class Solution { public ListNode removeNthFromEnd(ListNod原创 2015-03-09 01:22:01 · 334 阅读 · 0 评论 -
LeetCode-Merge Two Sorted Lists
直观的三个指针,两个在比较listpublic class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if ( l1 == null || l2 == null){ if ( l1 != null) return l原创 2015-03-09 02:03:16 · 253 阅读 · 0 评论 -
*Leetcode-Linked List Cycle
CC150上面讲解的很清楚一快一慢赛跑的两个指针,一个每次移动两步,一个每次移动一步。假如他们相遇,那么一定存在环。怎样检测环所在位置 看Linked List Cycle2while里面的判断条件不只是fast不是null,也要判断fast.next不是null,因为fast每次要移动两个public class Solution { public boolean hasCy原创 2015-03-09 04:54:48 · 308 阅读 · 0 评论 -
*LeetCode-Linked List Cycle II
这个题的思路很巧妙,只要想明白了,写起来非常简单,没有什么trick思路就是,fast每次移动两步,slow移动一步,当他们相遇的时候 他们距离cycle起始点的距离 与head距离cycle起始点的距离相等。这是因为当slow第一次到达cycle起始点的时候,fast一定已经在cycle之中k步,k就是cycle之前直线那部分list的长度。那么他们相遇就需要cycleSize - k步,对原创 2015-03-09 05:02:06 · 271 阅读 · 0 评论 -
*LeetCode-Add Two Numbers
最开始的时候想错了,以为如果长度不等,需要尾部对齐之后再相加,其实即使长度不一样,也是从头部相加。然后写代码的时候错再了返回的list head的处理问题,一般都是弄一个dummy head 然后一个指针先指向dummy head 然后操作指针去填补后面node,最后返回dummy head的next。还有一个看了别人的代码发现特别好的地方就是在while里面加上了carry大于0的判断,因为原创 2015-03-09 06:46:11 · 349 阅读 · 0 评论 -
*LeetCode-Swap Nodes in Pairs
指针的判断真的超级容易出错,多想几个test case 1,12,123都想全public class Solution { public ListNode swapPairs(ListNode head) { if ( head == null || head.next == null ) return head; ListNo原创 2015-03-09 07:20:28 · 302 阅读 · 0 评论 -
*LeetCode-Remove Duplicates from Sorted List
现在每个题都错好多 都加星 醉了最大的错误就是什么时候改比node.val什么时候该比node本身(看是否为一个位置)同时最后的dup没有考虑到 就是最后pos指针到了null 但是first和pos不在一个位置上 123444这种,最后的dup记得也要去掉。我的做法是两个指针,一个停在dup序列的第一个,另一个一直走到第一个不是dup的位置,然后更改next指针,其实比较麻烦我的原创 2015-03-09 00:59:20 · 263 阅读 · 0 评论 -
LeetCode-LRU Cache
这题主要考察数据结构,想要快速access 就想到array 但是有key value所以要用hashmap 加上需要在访问过后 放到队头 capacity满了之后要删除队尾 所以要用double linked list写的时候有很多细节,每次get和set都要注意把这个节点放到队头(或尾)这时候要看这个节点是不是本来就在队头。还有就是内部的node class 也就是double linke原创 2015-03-31 10:26:06 · 380 阅读 · 0 评论 -
*LeetCode-Candy
一开始的思路是先把这个ratings array sort 然后从小的rating开始fix 之后fix更大的 小的就不会受影响 但是排序的话就需要储存位置和rating值 需要用map 废了空间 还sort费时间 超时了但是也练习了一下如何sort map basing on valuepublic class Solution { public int candy(int[原创 2015-10-12 01:51:45 · 235 阅读 · 0 评论