LeetCode 24. 两两交换链表中的节点 | C语言版

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

题目描述

题目地址24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
在这里插入图片描述

解题思路

思路一:使用多指针
代码实现
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* swapPairs(struct ListNode* head){
    //设置一个虚拟头结点(统一操作)
    struct ListNode* dummyHead=(struct ListNode*)malloc(sizeof(struct ListNode));
    dummyHead->next=head;
    //当前节点
    struct ListNode* cur=dummyHead;

    //dummyHead(cur)->1->2->3->4->NULL

    while(cur->next!=NULL && cur->next->next!=NULL){
        //临时节点tmp:记录cur的下一个节点(1)
        struct ListNode* tmp=cur->next;
        //临时节点tmp1:记录cur的下下下一个节点(3)
        struct ListNode* tmp1=cur->next->next->next;

        //dummyHead(cur)->1(tmp)->2->3(tmp1)->4->NULL

        //两两交换操作
        //1.将cur的指针域指向cur->next->next(2)
        cur->next=cur->next->next;
        //2.将cur->next->next(2)和tmp(1)两个节点交换位置
        cur->next->next=tmp;
        //3.将cur->next->next(1)的指针域指向tmp1(3)
        cur->next->next->next=tmp1;

        //dummyHead(cur)->2->1(tmp)->3(tmp1)->4->NULL
        
        //cur向右移动两位,准备下一轮交换
        cur=cur->next->next;
    }
    return dummyHead->next;
}
运行结果

在这里插入图片描述

参考文章:

https://leetcode.cn/problems/swap-nodes-in-pairs/solutions/1720490/by-carlsun-2-mav4/?q=%E4%BB%A3%E7%A0%81%E9%9A%8F%E6%83%B3&orderBy=most_relevant

思路二:减少遍历节点数
代码实现
在这里插入代码片
运行结果
参考文章:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李莲花*

多谢多谢,来自一名大学生的感谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值