![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode链表
肉丸不肉
这个作者很懒,什么都没留下…
展开
-
链表专题经典题目+方法总结
一、经典题目: 找两个链表的交点(假设无环) 从有序链表中删除重复结点 交换链表中相邻结点 链表求和 判断回文链表 单链表反转 两个有序链表的合并 删除链表中倒数第n个结点 求链表的中间结点 环的检测 分割链表 链表元素按位置奇偶聚集 二、链表结构(LeetCode与Eclipse的结合) 三、做题总结/技巧/套路: 递归 尾插法 双指针:寻找距离尾部第K个节点、寻找环入口、寻找公共尾部入口...原创 2020-03-04 15:43:20 · 461 阅读 · 0 评论 -
LeetCode 141/142. Linked List Cycle (环形链表的两道题)
一、判断是否是环形链表 without using extra space public boolean hasCycle(ListNode head) { ListNode fast = head, slow = head; while(fast != null && fast.next != null) { fast ...原创 2020-03-03 20:45:58 · 230 阅读 · 0 评论 -
LeetCode 876. Middle of the Linked List
If there are two middle nodes, return the second middle node. 输入:[1,2,3,4,5,6] 输出:此列表中的结点 4 (序列化形式:[4,5,6]) 由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/mid...原创 2020-03-03 18:34:43 · 126 阅读 · 0 评论 -
LeetCode 328. Odd Even Linked List(链表元素按奇偶位置聚集)
The program should run in O(1) space complexity and O(nodes) time complexity. 解题思路:按照位置的奇偶,分别串奇链表和偶链表,最后 奇—>偶 (要保存偶链表的真正头结点) public ListNode oddEvenList(ListNode head) { //若不加此句,当链表只有一个结点...原创 2020-03-03 18:27:51 · 254 阅读 · 0 评论 -
LeetCode 725. Split Linked List in Parts(分隔链表)
题目描述:把链表分隔成 k 部分,每部分的长度都应该尽可能相同,排在前面的长度应该大于等于后面的。 This may lead to some parts being null. public static ListNode[] splitListToParts(ListNode root, int k) { //链表数组 ListNode[] res = new ListNode...原创 2020-03-03 18:12:07 · 219 阅读 · 0 评论 -
LeetCode 234. Palindrome Linked List(判断是否为回文链表)
O(n) time and O(1) space 解题思路: 1、找到中间结点(双指针) 2、逆置后半部分(自己思考复杂了,想着边找中间结点边逆置前半部分了) 3、依次比较 public static boolean isPalindrome(ListNode head) { //空链表和只有一个结点的链表都是回文链表 if(head == null || head.nex...原创 2020-03-03 17:17:08 · 247 阅读 · 1 评论 -
LeetCode 445. Add Two Numbers II(两个链表求和)
注意:不能翻转链表 思想:需要从“链表尾部结点”开始回溯“进位carry” 两种解决办法: 1、递归:分别求两个链表的长度,将短的链表在前端补0(先补0, 再递归) 2、用栈 (递归本质就是栈!!) 法一:栈 头插法 public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { if(l1 == null) retur...原创 2020-03-03 16:55:14 · 220 阅读 · 0 评论 -
LeetCode 24. Swap Nodes in Pairs(两两交换链表中的结点)
递归 //You may not modify the values in the list’s nodes, only nodes itself may be changed. //不能仅仅改变结点的值,而是应该实际结点交换 public static ListNode swapPairs(ListNode head) { //终止条件:无结点或只有一个结点时,终止交换 if(he...原创 2020-03-03 15:37:33 · 194 阅读 · 0 评论 -
LeetCode 19. Remove Nth Node From End of List(删除链表中倒数第n个结点)
双指针法 错因:可能会删第一个节点 public static ListNode removeNthFromEnd(ListNode head, int n) { ListNode fast = head, slow = head; while(n-- > 0) { fast = fast.next; } //有个测试用例是:删除第一个结点 if(fas...原创 2020-03-03 15:04:31 · 192 阅读 · 0 评论 -
LeetCode 83. Remove Duplicates from Sorted List(删除有序链表中的重复结点)
法一:迭代尾插法 尾插法: 1、什么时候用尾插法:保持单调递增升序时 2、需要注意两点: ① 尾指针tail,要不断更新 ② 后继指针runner,防止断链 public static ListNode deleteDuplicates(ListNode head) { if(head == null || head.next == null) return head; //递增...原创 2020-03-03 14:22:28 · 191 阅读 · 0 评论 -
LeetCode 21. Merge Two Sorted Lists(归并两个有序的单链表)
法一:空间换时间(类似归并) 1、单调递增有序:尾插法。尾指针要不变更新 2、善于用虚拟头结点dummyHead public static ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null) return l2; if(l2 == null) return l1; ListNode pa = l...原创 2020-03-02 20:22:41 · 195 阅读 · 0 评论 -
LeetCode 206. Reverse Linked List(反转链表)
一、两种解法: 迭代法 递归法 二、具体代码: 迭代法 //迭代法(自己写的,以head开头) public static ListNode reverseList(ListNode head) { //链表为空||只有一个结点 if(head == null || head.next == null) return head; ListNode one = h...原创 2020-03-02 17:21:23 · 187 阅读 · 0 评论 -
LeetCode 160. Intersection of Two Linked Lists(找出两个链表的交点,假设链表不带环)
一、判断链表是否相交 法1:把第一个链表的结尾连接到第二个链表的开头,看第二个链表是否有环(快慢指针) 法2: 直接比较两个链表的最后一个结点是否相同 (如果两个链表相交,那么必然拥有同一个尾节点,可以用两个指针同时从两个链表的头部出发,当都到达尾部时,如果都指向同一个节点,则说明链表相交。) public static boolean isCircle(ListNode headA, ListN...原创 2020-03-02 15:43:27 · 298 阅读 · 0 评论