力扣24 两两交换链表中的节点 Java版本

文章目录

题目

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

示例 1:

输入:head = 1,2,3,4

输出:2,1,4,3

示例 2:

输入:head = \[\]

输出:\[\]

示例 3:

输入:head = 1

输出:1

提示:

链表中节点的数目在范围 0, 100

0 <= Node.val <= 100

解题方法

在下面代码中详细注释了

Code

java 复制代码
class Solution {
    public ListNode swapPairs(ListNode head) {
        //如果是空链或者只有一个节点,那么直接返回头节点就行
        if (head == null || head.next == null) {
            return head;
        }
        ListNode pre = head;//pre是最初靠前的节点
        ListNode latter = head.next;//latter是最初靠后的节点
        head = latter;//直接让head=latter,因为一会翻转完成之后,第二个节点就会变成头节点
        ListNode temp = null;//防断链,用于之前已经反转好的部分与后边部分的链接
        while (pre != null && pre.next != null) {//只剩一个节点或者不剩节点就停止反转
            //接下来两行是互换位置
            pre.next = latter.next;
            latter.next = pre;

            if (temp != null) {//temp为空则表明是第一次翻转完,前面没有需要链接的部分
                temp.next = latter;
            }
            temp = pre;
            //更新pre和latter
            pre = pre.next;
            if (pre != null) {
                latter = pre.next;
            }
        }
        return head;
    }
}
相关推荐
我星期八休息15 分钟前
Linux I/O多路转接—epoll
java·linux·运维·服务器·开发语言·jvm·算法
学长毕业设计41 分钟前
基于springboot的云南中草药知识普及管理网站的设计与开发(源码+文档+讲解视频)
java·spring boot·后端
大模型码小白43 分钟前
AI 提示词专栏:使用系统指令(System Prompt)实现全局约束
java·大数据·运维·开发语言·人工智能·python·prompt
cxoptics1 小时前
蓝宝石的轴向在窗片和偏振片中起的作用
java
wuminyu1 小时前
Java FFM处理网络读写事件源码剖析
java·linux·c语言·jvm·c++
小江的记录本1 小时前
【AI Agent】《2026年9月 AI Agent全栈开发技术选型专项面试宝典》
java·spring boot·python·spring·ai·面试·ai编程
wenyq71 小时前
LeetCode 2904. Shortest and Lexicographically Smallest Beautiful String
算法·leetcode
梦梦代码精2 小时前
《LikeShop全产品技术硬核拆解:ThinkPHP8+Vue3+UniApp架构,私有化部署与二次开发实战指南》
java·低代码·系统架构·php·开源软件
一木 之林2 小时前
C/C++ 面向对象编程(OOP)(进阶)
java·c语言·c++
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发应用 阅读笔记 2
java·spring boot·笔记