摘要: 面试题 02.07. 链表相交 双指针 思路 a 指针先遍历A再遍历B, b 指针先遍历B再遍历A,a == b 时退出循环。 若A与B没有交点,a = b = null;若A与B有交点,则a 与 b均均指向第一个相交的结点。 心得 得出初步思路后,先在case上验证,再动手写代码。否则思路没考虑全 阅读全文
posted @ 2025-10-17 23:19 Nickey103 阅读(10) 评论(0) 推荐(0)
摘要: 19. 删除链表的倒数第 N 个结点 快慢指针 思路 快指针先走N步,然后快慢指针以相同速度向右遍历链表,当快指针指向最后一个结点时,慢指针指向倒数第N个结点的前驱结点。 补充 涉及到链表的插入与删除操作增加一个虚拟头结点准没错! class Solution { public ListNode r 阅读全文
posted @ 2025-10-17 21:50 Nickey103 阅读(9) 评论(0) 推荐(0)
摘要: 24. 两两交换链表中的节点 #### 双指针 思路 指针pre、cur遍历链表,每次循环分别指向两个相邻的结点。指针link、tmp辅助实现两两交换。每次交换指针操作次数过多,较复杂,画图避免出错。 class Solution { public ListNode swapPairs(ListNo 阅读全文
posted @ 2025-10-17 20:16 Nickey103 阅读(15) 评论(0) 推荐(0)
摘要: 206.反转链表 双指针 class Solution { public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; ListNode tmp = null; while (cur ! 阅读全文
posted @ 2025-10-17 15:49 Nickey103 阅读(9) 评论(0) 推荐(0)
摘要: 707. 设计链表 思路 使用带虚拟头结点的单链表,简化插入和删除操作。 // 单链表 class MyLinkedList { // 链表结点 class ListNode { int val; ListNode next; ListNode(int val) { this.val = val; 阅读全文
posted @ 2025-10-17 15:24 Nickey103 阅读(7) 评论(0) 推荐(0)
摘要: 203. 移除链表元素 删除链表结点 方式1:直接在原链表删除 方式2:添加一个虚拟头结点,再删除 删除链表结点操作是通过前一个结点完成的,由于头结点没有前驱结点,所以头结点的删除需要单独的处理逻辑。 通过添加一个虚拟头结点,链表中所有结点的删除操作相同。 方式1 class Solution { 阅读全文
posted @ 2025-10-17 12:13 Nickey103 阅读(11) 评论(0) 推荐(0)