力扣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;
    }
}
相关推荐
huohuopro2 分钟前
java金额转换,将数字金额转换为7位大写
java·开发语言
lionliu05199 分钟前
数据库的乐观锁和悲观锁的区别
java·数据库·oracle
赵得C12 分钟前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师
im_AMBER13 分钟前
Leetcode 79 最佳观光组合
笔记·学习·算法·leetcode
歪楼小能手13 分钟前
Android16底部导航栏添加音量加减虚拟按键
android·java·平板
高山上有一只小老虎16 分钟前
小红背单词
java·算法
Cosmoshhhyyy17 分钟前
《Effective Java》解读第26条:请不要使用原生态类型
java·开发语言
练习时长一年20 分钟前
在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
阿杆.28 分钟前
如何在 Spring Boot 中接入 Amazon ElastiCache
java·spring boot·后端