【代码随想录day4】两两交换链表中的节点

news/2024/7/5 1:52:27

题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

 

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

示例 2:

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

示例 3:

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

 思路

这里增加了虚拟头节点,为了就是方便,可以将所有的步骤统一起来,不用单独处理头节点的部分了。

首先需要理解,这里的交换是有顺序的,从左往右每两个交换一次。那就会遇到奇偶的情况了,如果节点数(不带虚拟头节点)为偶数,我们正好可以将每两个节点交换一次;如果为奇数,我们最后肯定还剩一个节点,这个节点不用管,他没法再交换了。

我们定义pre和now分别指向相邻的两个节点,初始pre为虚拟头节点,now为head节点。每次交换分成交换更新指针两步。要注意,我们不仅要将now和now.next进行交换,还要注意将pre的指向也进行相应的修改!

因为head已经改变了,所以最后返回的应该是虚拟头节点的next而不是head!

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def solve(head):
    if head==None or head.next==None:
        return head
    fake_head = ListNode(head)
    pre = fake_head
    now = head
    while now.next:
        # 1.交换
        tmp = now.next
        now.next = now.next.next
        tmp.next = now
        pre.next = tmp
        # 偶数个节点
        if now.next==None:
            break
        # 2.更新pre和now指针
        now = now.next
        pre = tmp.next
    return fake_head.next


http://lihuaxi.xjx100.cn/news/1319496.html

相关文章

论文学习——U-Net: Convolutional Networks for Biomedical Image Segmentation

UNet的特点 采用端到端的结构,通过FCN(最后一层仍然是通过卷积完成),最后输出图像。通过编码(下采样)-解码(上采样)形成一个“U”型结构。每次下采样时,先进行两次卷积&…

VUE项目打包成apk

在我们的开发需求中,可能会遇到需要将vue项目中的H5代码打包成一个安卓的app,那么我为大家介绍一套保姆级的解决方案,看完你就会。 VUE HBuilder 1.准备工作: 需要下载一个HBuilder X编辑器,不过我相信大家身为前端…

代码随想录算法训练营第59天 | 503.下一个更大元素 II + 42.接雨水

今日任务 目录 503.下一个更大元素 II - Medium 42.接雨水 - Hard 503.下一个更大元素 II - Medium 题目链接:力扣-503. 下一个更大元素 II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nu…

【C语言基础】函数(2)

在函数(1)中我们已经讲过了函数的定义,形参与实参,函数的调用,局部变量与栈内存 接下来还有几个要强调的函数相关知识。 一、静态函数 静态函数是在函数声明前加上关键字 static 的函数。静态函数在C语言中具有以…

MySQL的高可用性方案有哪些?MySQL的字段类型如何选择和优化?MySQL的并发控制机制是怎样的?MySQL的全文搜索如何实现?

1、MySQL的高可用性方案有哪些? MySQL的高可用性方案有以下几种: 主从复制(Master-Slave Replication):这是MySQL最常用的高可用性方案之一。在主从复制中,一个主数据库(Master)接收…

2023-07-07 LeetCode每日一题(过桥的时间)

2023-07-07每日一题 一、题目编号 2532. 过桥的时间二、题目链接 点击跳转到题目位置 三、题目描述 共有 k 位工人计划将 n 个箱子从旧仓库移动到新仓库。给你两个整数 n 和 k,以及一个二维整数数组 time ,数组的大小为 k x 4 ,其中 tim…

Vue组件库Element-常见组件-分页

常见组件-Pagination 分页 Pagination 分页&#xff1a;当数据过多时&#xff0c;会使用分页分解数据 具体关键代码如下&#xff1a;&#xff08;重视注释&#xff09; <template><div><!-- Pagination 分页 --><el-pagination background layout"…

如何使用ChatGPT的API(四)思维链推理

在回答一个具体问题之前&#xff0c;模型对问题进行详细的推理是很重要的。有时&#xff0c;模型可能会因为急于得出结论而犯推理错误&#xff0c;所以我们可以仔细设计prompt&#xff0c;要求在模型提供最终答案之前进行一系列相关的推理步骤&#xff0c;这样它就可以更长时间…