Leetcode24 —— 两两交换链表中的节点(迭代法)

目录

题目:

题解:

C++代码:

题目:

题解:

递归法不太好理解,这里讲解迭代法。

  • 哨兵节点兜底:创建虚拟头节点(dummyHead)指向原链表头,统一所有节点对的交换逻辑(避免头节点交换的特殊处理);

  • 循环遍历交换:用临时指针从哨兵节点开始,每次定位其后两个待交换节点(node1、node2),通过三步指针调整完成交换:

    复制代码
    temp→next = node2(把 node2 接到 temp 后);
    
    node1→next = node2→next(保留 node2 后续链表);
    
    node2→next = node1(完成两两交换);
  • 指针后移迭代:将临时指针移到交换后的第二个节点(node1),重复上述交换,直到剩余节点不足两个;

  • 清理返回:记录哨兵节点的 next(新链表头),释放哨兵节点内存,返回结果。

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* prehead = new ListNode(0);
        prehead->next = head;
        ListNode* temp  = prehead;
        while(temp->next && temp->next->next){
             ListNode* node1 = temp->next;
             ListNode* node2 = temp->next->next;
             //交换的三个步骤
             temp->next = node2;
             node1->next = node2->next;
             node2->next = node1;
             temp = node1; //更新temp的值容易忘;
        }
        ListNode* ans = prehead->next;
        delete prehead;
        return ans; // 返回交换后的链表头
    }
};
相关推荐
AI情绪识别开源1 小时前
检信 AI 智能推广平台(代号:JX-Promote)
人工智能·算法·erlang
老当益壮梁奶奶1 小时前
Linux软件编程学习笔记(八):进程间通信详解(1)
linux·c语言·笔记·学习·算法
不会就选b2 小时前
算法日常・每日刷题--<BFS拓扑排序>4
算法
不正经学生2 小时前
C语言动态内存管理(上):堆上的自由与责任
c语言·开发语言·c++·算法·面试
伟大的车尔尼2 小时前
贪心的概念
数据结构·算法·贪心
方方洛2 小时前
vllm教程-00-前言与导读
人工智能·算法·vllm
AI情绪识别开源2 小时前
检信AI高一分班分科智选评估系统 v2.0测试报告
开发语言·数据结构·人工智能·科技
IT毕设实战小研2 小时前
电影数据可视化推荐系统
大数据·后端·爬虫·python·算法·信息可视化·课程设计
且随疾风前行.2 小时前
从驱动来分析服务的添加过程
算法
CoderYanger3 小时前
A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ
java·数据结构·算法·leetcode·面试