当前位置: 首页 > news >正文

算法-链表篇04-两两交换链表中的节点

两两交换链表中的节点

力扣题目链接

题目描述

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

解题思路

这道题非常考验处理链表的灵活性,其中链表节点交换和后移的操作需要对多个节点进行有序的操作。
首先我们判断节点的长度,如果节点长度小于二,则不需要任何操作,直接返回;
创建两个节点指针分别指向第一个和第二个节点;
对最前两个节点进行交换;
如果剩余节点长度如果大于等于二,则可以进行循环操作:

  • 首先创建一个临时节点temp,用于保存已经交换完毕的节点的尾节点;
  • 把两个指针都向后移动两位,指向未进行交换操作的前两个节点;
  • 交换两个指针指向的节点,并续在temp后面。

题解

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(!head || !head->next){
            return head;
        }

        ListNode* p1 = head;
        ListNode* p2 = head->next;
        head = p2;
        p1->next = p2->next;
        p2->next = p1;
        while(p1->next != nullptr && p1->next->next != nullptr){
            ListNode* temp = p1;
            p1 = p1->next;
            p2 = p1->next;
            temp->next = p2;
            p1->next = p2->next;
            p2->next = p1;
        }

        return head;
    }
};

总结

这道题做起来非常头秃,虽然思路一开始就确定了,但是在做题的过程中,遇到了很多细节上的问题。希望大家都可以尝试着自己写一下,可以在过程中发现很多理论上注意不到的地方。

相关文章:

  • DeepSeek告别服务器繁忙
  • C++游戏开发流程图
  • 基于Spring Boot+Vue的宠物服务管理系统(源码+文档)
  • Java里ArrayList和LinkedList有什么区别?
  • python的pass
  • 基于Python的深度学习音乐推荐系统(有配套论文)
  • MySQL8.x版本的新的功能特性总结
  • 【AI论文】随机鹦鹉在大型语言模型(LLM)之肩:物理概念理解的总结性评估
  • STM32物联网终端实战:从传感器到云端的低功耗设计
  • 【etcd】etcd_go操作与etcd锁实现原理
  • jQuery介绍(快速、简洁JavaScript库,诞生于2006年,主要目标是简化HTML文档操作、事件处理、动画和Ajax交互)
  • ai生成毕业论文(ai写作论文免费网站推荐)
  • Hot100 堆
  • 每日一题——把数字翻译成字符串
  • unity学习43:子状态机 sub-state machine
  • 【数据标准】企业的数据标准化从业务、技术、管理视角的要求
  • 【第11章:生成式AI与创意应用—11.4 生成式AI在其他领域的创新应用与未来展望】
  • 如何使用Maxscript选择可编辑多边形中最大的面?
  • deepseek r1从零搭建本地知识库10:嵌入模型和知识库建设
  • 【koa】03-Koa第二阶段内容-路由管理和模板引擎(上篇)
  • 孙卫东会见巴基斯坦驻华大使:支持巴印两国实现全面持久停火
  • “80后”德州市接待事务中心副主任刘巍“拟进一步使用”
  • 视频丨美国两名男童持枪与警察对峙,一人还试图扣动扳机
  • 专访|家人眼中的周碧初:用色彩写诗,实践油画“民族化”
  • 射箭世界杯上海站摘得两银,中国队新周期冲击韩国缩小差距
  • “春申阡陌”漆画展:将传统漆艺融入现代创作