LeetCode Summary Linked List
来源:互联网 发布:萨德对中国的影响 知乎 编辑:程序博客网 时间:2024/06/02 19:27
============================== Linked List ============================
复制
138. Copy List with Random Pointer(复制一个乱七八糟的链表)
S1(Mine): 用递归,指向什么,就新生成一个node,让这个node等于递归当前点指向的东西
用hash记录节点地址是否出现过。
newNode->label=head->label;
if (head->next!=NULL) newNode->next=copyRandomList(head->next);
if (head->random!=NULL) newNode->random=copyRandomList(head->random);
加法
2. Add Two Numbers(用链表表示的两个数,把它们相加)
S1(Mine): 直接遍历相加,注意进位
删除元素
19. Remove Nth Node From End of List(从一个链表的末尾删除n个数)
S1(Mine):模拟,计数
203. Remove Linked List Elements(删除值为val的所有元素)
S(Mine):模拟
237. Delete Node in a Linked List(删除指定元素)
S(Mine): 模拟
合并
21. Merge Two Sorted Lists(合并两个链表)
88. Merge Sorted Array(合并2个排好序的数组)
S:注意处理末尾的冗余
23. Merge k Sorted Lists(合并k个链表)
S(Discuss): 写一个专门合并两个链表的函数,每次合并两个,然后再放在里面再继续跟其他的合并。
转化成合并两个链表。
排序
148. Sort List(给单链表排序)
S(Mine): 暴力,很慢*5
S(Discuss): 归并排序
sortList函数:每次把链表均分左右部分,分别调用sortList(left)和sortList(right),在merge(left,right)
总之:递归拆分,然后merge
147. Insertion Sort List(用插入排序排链表)
S1(Mine): 朴素
S2(Discuss): 新建一个INT_MIN的结点作表头,插入排序,最后返回head->next即可。
用一个INT_MIN真的省了好多事。
换位置 反序 指定换位规则
24. Swap Nodes in Pairs(两两交换位置)
S:模拟
25. Reverse Nodes in k-Group(每k个一组,反序)
S1(Mine): 用vector记录,当到k个时,放在链表里,cnt清零,vector清零。
61. Rotate List(旋转一个链表)
S1(Mine): 模拟
206. Reverse Linked List(反转一个链表)
92. Reverse Linked List II(从m到n反转一个链表)
朴素模拟
86. Partition List(比x小的放在左边,大的放右边)
S1(Mine):开两个链表大和小,最后再连起来。
S2(Discuss):比我的code简洁
143. Reorder List(一个链表,分成两半,一个正序一个反序,交叉相连)
S1(Mine): vector<ListNode*> re;按照顺序放进去,根据下标方便访问,然后反序交叉
S2(Discuss): 三步:找到中点,右边反序,合并
328. Odd Even Linked List(奇数编号放前面,偶数编号放后面)
S(Mine):用flag标记是奇数还是偶数,放在对应的两个lists里面,再合并两个lists
环,找交点
141. Linked List Cycle(判断链表是否有环)
S1(Mine):两个pointers,一个快,一个慢,若相遇则有环
142. Linked List Cycle II(找到一个环的开始)
S:两个pointers,一个快,一个慢,然后根据一堆等式,找相遇点,开始点。
160. Intersection of Two Linked Lists(找到两个Lists的交点)
S1(Mine): 遍历两个lists并计数,如果最后一个结点相同则相交;然后根据计数数个数看交点是哪个。
S(Discuss): 非常天才的想法,详见这道题的.cpp文件,有思路。
用两个指针分别指向l1和l2,当其中一个到达尾部的时候,就指向另一个list的头部,继续,直到两个指针相遇。
1. 当不想交时候,会在NULL相遇。
2. 当相交的时候,会在交点相遇。
check满足某种要求
234. Palindrome Linked List(判断List是否回文)
S1(Mine): 分成两半,反序右边,逐一对比
复制
138. Copy List with Random Pointer(复制一个乱七八糟的链表)
S1(Mine): 用递归,指向什么,就新生成一个node,让这个node等于递归当前点指向的东西
用hash记录节点地址是否出现过。
newNode->label=head->label;
if (head->next!=NULL) newNode->next=copyRandomList(head->next);
if (head->random!=NULL) newNode->random=copyRandomList(head->random);
加法
2. Add Two Numbers(用链表表示的两个数,把它们相加)
S1(Mine): 直接遍历相加,注意进位
删除元素
19. Remove Nth Node From End of List(从一个链表的末尾删除n个数)
S1(Mine):模拟,计数
203. Remove Linked List Elements(删除值为val的所有元素)
S(Mine):模拟
237. Delete Node in a Linked List(删除指定元素)
S(Mine): 模拟
合并
21. Merge Two Sorted Lists(合并两个链表)
88. Merge Sorted Array(合并2个排好序的数组)
S:注意处理末尾的冗余
23. Merge k Sorted Lists(合并k个链表)
S(Discuss): 写一个专门合并两个链表的函数,每次合并两个,然后再放在里面再继续跟其他的合并。
转化成合并两个链表。
排序
148. Sort List(给单链表排序)
S(Mine): 暴力,很慢*5
S(Discuss): 归并排序
sortList函数:每次把链表均分左右部分,分别调用sortList(left)和sortList(right),在merge(left,right)
总之:递归拆分,然后merge
147. Insertion Sort List(用插入排序排链表)
S1(Mine): 朴素
S2(Discuss): 新建一个INT_MIN的结点作表头,插入排序,最后返回head->next即可。
用一个INT_MIN真的省了好多事。
换位置 反序 指定换位规则
24. Swap Nodes in Pairs(两两交换位置)
S:模拟
25. Reverse Nodes in k-Group(每k个一组,反序)
S1(Mine): 用vector记录,当到k个时,放在链表里,cnt清零,vector清零。
61. Rotate List(旋转一个链表)
S1(Mine): 模拟
206. Reverse Linked List(反转一个链表)
92. Reverse Linked List II(从m到n反转一个链表)
朴素模拟
86. Partition List(比x小的放在左边,大的放右边)
S1(Mine):开两个链表大和小,最后再连起来。
S2(Discuss):比我的code简洁
143. Reorder List(一个链表,分成两半,一个正序一个反序,交叉相连)
S1(Mine): vector<ListNode*> re;按照顺序放进去,根据下标方便访问,然后反序交叉
S2(Discuss): 三步:找到中点,右边反序,合并
328. Odd Even Linked List(奇数编号放前面,偶数编号放后面)
S(Mine):用flag标记是奇数还是偶数,放在对应的两个lists里面,再合并两个lists
环,找交点
141. Linked List Cycle(判断链表是否有环)
S1(Mine):两个pointers,一个快,一个慢,若相遇则有环
142. Linked List Cycle II(找到一个环的开始)
S:两个pointers,一个快,一个慢,然后根据一堆等式,找相遇点,开始点。
160. Intersection of Two Linked Lists(找到两个Lists的交点)
S1(Mine): 遍历两个lists并计数,如果最后一个结点相同则相交;然后根据计数数个数看交点是哪个。
S(Discuss): 非常天才的想法,详见这道题的.cpp文件,有思路。
用两个指针分别指向l1和l2,当其中一个到达尾部的时候,就指向另一个list的头部,继续,直到两个指针相遇。
1. 当不想交时候,会在NULL相遇。
2. 当相交的时候,会在交点相遇。
check满足某种要求
234. Palindrome Linked List(判断List是否回文)
S1(Mine): 分成两半,反序右边,逐一对比
0 0
- LeetCode Summary Linked List
- LeetCode Summary I ---Linked List
- [leetcode] Summary of Linked List (1)
- linked list summary
- 【LeetCode】Linked List Cycle
- Leetcode: Linked List Cycle
- Leetcode Linked List Cycle
- Leetcode: Linked List Cycle
- LeetCode:Linked List Cycle
- [LeetCode]Linked List Cycle
- LeetCode | Linked List Cycle
- Leetcode: Linked List Cycle
- LeetCode: Linked List Cycle
- LeetCode - Linked List Cycle
- [LeetCode] - Linked List Cycle
- LeetCode - Linked List Cycle
- [LeetCode]Linked List Cycle
- 【LeetCode】Linked List Cycle
- 2.10 随记
- ACM刷题之HDU————Children’s Queue
- jpa中PropertyReferenceException: No property found for type异常原因
- window环境下HTK下载安装
- 机器人的指令
- LeetCode Summary Linked List
- java多线程常用的类
- 全面解析Android EditText以及软键盘的设置
- Python知识点备忘(1)
- 线段树模板
- 安卓学习随笔(1)
- KMP水题
- LeetCode Summary Math
- Servlet拦截静态图片的解决方案