代码随想录打卡第4天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、面试题02.07. 链表相交、142. 环形链表II

24. 两两交换链表中的节点 链接:力扣24 文章:代码随想录 视频:B站讲解 状态:✅ 第一想法 两两交换,头节点也要进入交换,要把这种特殊情况转变为一般情况,所以需要引入dummyHead; 让之后的交换都是某个节点的next和next->next;变成了一般性问题; 还有就是三指针的交换顺序,这里采用标记了最后需要指向的节点降低心智负担; 看完题解后的想法 —— 实现中遇到的困难 dummy.next忘记指向head了; 代码 class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode dummy(0); dummy.next = head; ListNode* cur = &dummy; while (cur->next != nullptr && cur->next->next != nullptr) { ListNode* finalFoward = cur->next->next->next; ListNode* firstMove = cur->next->next; ListNode* secondMove = cur->next; cur->next = firstMove; firstMove->next = secondMove; secondMove->next = finalFoward; cur = cur->next->next; } return dummy.next; } }; 19. 删除链表的倒数第N个节点 链接:力扣19 文章:代码随想录 视频:B站讲解 状态:⚠️ 第一想法 第一想法是反转链表,然后从头找过去,然后删除节点再返回来; ...

March 7, 2026 · KahanaT800

代码随想录打卡第3天 | 203. 移除链表元素、707. 设计链表、206. 反转链表

203. 移除链表元素 链接:力扣203 文章:代码随想录 视频:B站讲解 状态:✅ 第一想法 因为要删除节点,可能头节点本身也是要删除的,因此引入dummy_head,这样之后的所有节点都是next节点也不用区分是不是头节点; 看完题解后的想法 实现中遇到的困难 实现的时候忽略了next的next仍然可能是要删除的值; 代码 class Solution { public: ListNode* removeElements(ListNode* head, int val) { ListNode dummy(INT_MAX); dummy.next = head; ListNode* cur = &dummy; while (cur->next != nullptr) { if (cur->next->val == val) { cur->next = cur->next->next; // 只是删掉了后继的第一个节点,可能有连续需要删除的 } else { cur = cur->next; // 只有cur->next不是目标才能走 } } return dummy.next; } }; 707. 设计链表 链接:力扣707 文章:代码随想录 视频:B站讲解 状态:⚠️ 第一想法 考察的是类的基本书写,需要注意各种代码规范; 因为有频繁的插入和删除,所以需要维护一个dummyHead来保证不用单独处理Head的情况; ...

March 6, 2026 · KahanaT800