leetcode 24. 两两交换链表中的节点

24. 两两交换链表中的节点

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

题解:代码随想录 ---24. 两两交换链表中的节点

c 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
/*创建一个虚拟节点:一开始该节点指向要交换的两个结点前,借助两个辅助变量完成交换,
交换完成后,该虚拟节点移动两个结点,继续进行下一轮交换,直到虚拟节点next域指向空(偶数节点),
虚拟节点next的next域指向空(注意偶数节点与奇数节点的结束条件)*/
struct ListNode* swapPairs(struct ListNode* head) {
    struct ListNode *newnoode=malloc(sizeof(struct ListNode));//创建虚拟节点
    newnoode->next=head;//指向头结点
    struct ListNode *cur=newnoode;//移动的节点
    //奇数和偶数节点的结束条件
    while(cur->next && cur->next->next)
    {
        struct ListNode *temp=cur->next; //保存第一个结点
        struct ListNode *temp1=cur->next->next->next;//保存第三个节点
        cur->next=cur->next->next;//步骤1
        cur->next->next=temp;//步骤2
        cur->next->next->next=temp1;//步骤3
        //更新节点
        cur=cur->next->next;
    }
    struct ListNode *result=newnoode->next;
    free(newnoode);
    return result;
}
相关推荐
qq_4308558812 小时前
线代第二章矩阵第八节逆矩阵、解矩阵方程
线性代数·算法·矩阵
月明长歌12 小时前
【码道初阶】Leetcode136:只出现一次的数字:异或一把梭 vs HashMap 计数(两种解法完整复盘)
java·数据结构·算法·leetcode·哈希算法
Swift社区12 小时前
LeetCode 456 - 132 模式
java·算法·leetcode
LYFlied12 小时前
【每日算法】LeetCode 152. 乘积最大子数组(动态规划)
前端·算法·leetcode·动态规划
圣保罗的大教堂12 小时前
leetcode 3075. 幸福值最大化的选择方案 中等
leetcode
爱学大树锯12 小时前
【(格式化字符串)】
算法
wearegogog12312 小时前
压缩感知和稀疏表示恢复算法中的L1同伦算法
人工智能·算法
core51212 小时前
决策树 (Decision Tree):像“猜猜看”游戏一样的AI算法
人工智能·算法·决策树
xa1385086912 小时前
ARCGIS PRO SDK 多边形四至点计算
算法·arcgis
Dream it possible!13 小时前
LeetCode 面试经典 150_回溯_单词搜索(104_79_C++_中等)
c++·leetcode·面试·回溯