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

【LeetCode: 24. 两两交换链表中的节点 + 链表】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 链表
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

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

⛲ 题目描述

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

示例 1:
在这里插入图片描述

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

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

输入:head = [1]
输出:[1]

提示:

链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100

🌟 求解思路&实现代码&运行结果


⚡ 链表

🥦 求解思路
  1. 先创建一个虚拟头节点并使其指向原链表头节点,用指针cur指向虚拟头节点,方便后续操作与处理边界情况。
  2. 进入循环,只要当前节点cur的下一个节点以及下下个节点都不为空,就进行节点交换操作:
    • 取出要交换的两个相邻节点分别记为node1和node2。
    • 调整指针,先让cur的下一个节点指向node2,再将node1的下一个节点指向node2的下一个节点,最后让node2的下一个节点指向node1,完成这两个相邻节点的交换。
    • 让cur移动到交换后的第一个节点位置(即node1),为下一轮交换做准备。
  3. 循环结束后,返回虚拟头节点的下一个节点,也就是完成两两交换后的链表头节点。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null)
            return null;
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode cur = dummy;
        while (cur.next != null && cur.next.next != null) {
            ListNode node1 = cur.next;
            ListNode node2 = cur.next.next;
            cur.next = node2;
            node1.next = node2.next;
            node2.next = node1;
            cur = node1;
        }
        return dummy.next;
    }
}

🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/448751.html

相关文章:

  • 未来将要被淘汰的编程语言
  • Redisson锁简单使用
  • 基础爬虫案例实战
  • 你的第一个博客-第一弹
  • VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)
  • STM32-笔记5-按键点灯(中断方法)
  • MONI后台管理系统-swagger3(springdoc-openapi)集成
  • 齐次矩阵包含平移和旋转
  • CCF-GESP 等级考试 2023年9月认证C++一级真题解析
  • 未来将要被淘汰的编程语言
  • 滑动窗口 + 算法复习
  • 助力医疗高效运转:SSM 医院预约挂号系统 Vue 技术实现与设计
  • 基于Pytorch实现的说话人日志(说话人分离)
  • kubernates实战
  • 腾讯云智能结构化OCR:以多模态大模型技术为核心,推动跨行业高效精准的文档处理与数据提取新时代
  • Nacos 3.0 考虑升级到 Spring Boot 3 + JDK 17 了!
  • openjdk17 从C++视角 看字节码ldc指令字符串加载过程
  • 三、使用langchain搭建RAG:金融问答机器人--检索增强生成
  • docker 为单个容器设置代理
  • Input子系统驱动---学习记录
  • 整理一些/etc/X11/xorg.conf,/etc/X11/xorg.conf.d相关知识的学习笔记
  • 微服务openfeign配置重试机制
  • Unittest01|TestCase、断言、装饰器、夹具、清理函数、ddt
  • FastAPI vs Go 性能对比分析
  • 语言模型与向量模型:深入解析与实例剖析
  • PHP中实现拓扑算法