【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
}
相关推荐
凯瑟琳.奥古斯特4 小时前
力扣1235:加权区间调度最优解
java·python·算法·leetcode·职场和发展
耶叶4 小时前
餐厅出入最少人数问题:贪心算法
算法·贪心算法
gihigo19984 小时前
基于小波框架与稀疏表示的SAR图像目标识别系统(MATLAB实现)
算法
吴可可1234 小时前
CAD2004自定义实体开发环境配置
c++·算法
装不满的克莱因瓶4 小时前
矩阵的主成分是什么?主成分分析(PCA)又能做什么?
人工智能·线性代数·算法·机器学习·ai·矩阵·pca
大菜菜小个子4 小时前
template<typename T>使用
java·开发语言·算法
Fanfanaas5 小时前
C++ 继承
java·开发语言·jvm·c++·学习·算法
lqqjuly5 小时前
模型合并与融合:理论、算法与可运行实现—从损失曲面几何到多模型融合
算法
memcpy05 小时前
LeetCode 2144. 打折购买糖果的最小开销【贪心】
算法·leetcode·职场和发展