代码随想录训练营 Day04- 链表下
作者:jjn0703
- 2023-07-02 江苏
本文字数:1473 字
阅读完需:约 5 分钟
作业题
24. 两两交换链表中的节点
public class LeetCode24 { public ListNode swapPairs(ListNode head) { ListNode pre = new ListNode(0); pre.next = head; ListNode temp = pre; while(temp.next != null && temp.next.next != null) { ListNode start = temp.next; ListNode end = temp.next.next; temp.next = end; start.next = end.next; end.next = start; temp = start; } return pre.next; }}
复制代码
19. 删除链表的倒数第 N 个结点
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(-1); dummy.next = head; ListNode fast = dummy, slow = dummy; int i = 0; for (; i <= n && fast != null; i++) { fast = fast.next; } while (fast != null) { fast = fast.next; slow = slow.next; } if (slow != null && slow.next != null) { slow.next = slow.next.next; } return dummy.next; }}复制代码
面试题 02.07. 链表相交
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { ListNode first = headA, second = headB; while (first != second) { first = (first !=null) ? first.next : headB; second = (second != null) ? second.next : headA; } return first; }}复制代码
142. 环形链表 II
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode detectCycle(ListNode head) { // 初始化的时候,均指向头结点 ListNode fast = head, slow = head; while (true) { // 快指针碰到null,说明不存在环 if (fast == null || fast.next == null) { return null; } fast = fast.next.next; slow = slow.next; if (fast == slow) { break; } } // 重新让快指针回到头结点,快慢指针再次相遇时,其距离一定等于a + n * b fast = head; while (fast != slow) { fast = fast.next; slow = slow.next; } return fast; }}复制代码
总结
for 循环的结束条件可以通过临界值带入来判断代码写的是否正确;
求倒数第 N 个节点,可以转化为快慢指针,快指针先走 N 步,慢指针再出发,快指针走到尾部,慢指针所在位置即是要求的节点。
划线
评论
复制
发布于: 刚刚阅读数: 4
版权声明: 本文为 InfoQ 作者【jjn0703】的原创文章。
原文链接:【http://xie.infoq.cn/article/97e14e5e6bca1d9f6ff8a44dc】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
jjn0703
关注
Java工程师/终身学习者 2018-03-26 加入
USTC硕士/健身健美爱好者/Java工程师.










评论