欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 力扣 Hot 100 刷题记录 - 两两交换链表中的节点

力扣 Hot 100 刷题记录 - 两两交换链表中的节点

2025/4/8 6:25:01 来源:https://blog.csdn.net/weixin_50893711/article/details/146070235  浏览:    关键词:力扣 Hot 100 刷题记录 - 两两交换链表中的节点

力扣 Hot 100 刷题记录 - 两两交换链表中的节点

题目描述

两两交换链表中的节点 是力扣 Hot 100 中的一道经典题目,题目要求如下:

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部值的情况下完成本题(即只能进行节点交换)。

示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]


解题思路

这道题的核心是通过指针操作交换相邻的两个节点。需要注意以下几点:

  1. 虚拟头节点

    • 使用虚拟头节点 dummy 简化边界条件处理,特别是头节点的交换。
  2. 指针操作

    • 定义三个指针:prevcurrnext,分别表示前一个节点、当前节点和下一个节点。
    • 通过调整指针的指向,完成两个节点的交换。
  3. 遍历链表

    • 每次交换两个节点后,移动 prev 指针到下一组节点的前一个位置。
  4. 边界条件

    • 如果链表长度为奇数,最后一个节点不需要交换。

C++ 代码实现

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummy = new ListNode(0); // 虚拟头节点dummy->next = head;ListNode* prev = dummy; // 前一个节点while (prev->next && prev->next->next) {ListNode* curr = prev->next;      // 当前节点ListNode* next = curr->next;      // 下一个节点// 交换节点prev->next = next;curr->next = next->next;next->next = curr;// 移动 prev 指针prev = curr;}return dummy->next; // 返回新链表的头节点}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词