【Leetcode】24. 两两交换链表中的节点

【Leetcode】24. 两两交换链表中的节点

【Leetcode】24. 两两交换链表中的节点

代码

go 复制代码
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func swapPairs(head *ListNode) *ListNode {
    // 如果链表为空或者只有一个节点
    if head == nil || head.Next == nil {
        return head
    }
    // 创建虚拟头结点
    dummy := &ListNode{
        Next : head,
    }
    // 三个指针
    pre, cur, ne := dummy, head, head.Next
    for cur != nil {
        // 如果ne为空,则直接return
        if ne == nil {
            break
        }
        // 临时保留ne的下一个节点
        t := ne.Next
        // pre指向ne
        pre.Next = ne
        // ne指向cur
        ne.Next = cur
        // cur指向原本ne的下一个节点
        cur.Next = t

        // pre跳到cur
        pre = cur
        // cur跳到原本ne的下一个节点
        cur = t 
        // 如果cur不为空,则让ne跳到cur的下一个节点
        if cur != nil {
            ne = cur.Next
        }
    }
    // 返回虚拟头节点的下一个节点
    return dummy.Next
}
相关推荐
番茄味城市甜菜1 分钟前
数据结构:双向链表实现,链表与顺序表的对比
数据结构·链表
怕浪猫6 分钟前
Super-agent 在各大模型厂商的应用情况
算法·面试·github
海绵宝宝转agent32 分钟前
LeetCode100 二叉树个人题解
算法·leetcode·深度优先
octopus_c38 分钟前
C++ 模板详解:函数模板、类模板、特化与分离编译
开发语言·c++·算法
東隅已逝,桑榆非晚44 分钟前
算法1. 双指针法-移动零
c++·算法
CQU_JIAKE2 小时前
11.1[A]
算法
文丑颜不良啊2 小时前
LeetCode1581~1600题目解析
java·leetcode
小郎君6582 小时前
(六)el-cascader 的展示值为什么不能直接 join:emitPath、路径还原与多选去重
vue.js·算法
郝学胜-神的一滴4 小时前
游戏设计:原型与开发 19:U3D工位布置与性格说明书
人工智能·算法·unity·unreal engine·游戏策划·游戏设计
hahaha60165 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发