【LeetCode刷题记录】24. 两两交换链表中的节点

ops/2024/10/10 17:42:52/

24 两两交换链表中的节点

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

示例 1:
在这里插入图片描述
输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:
输入:head = []
输出:[]

示例 3:
输入:head = [1]
输出:[1]

提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100

思路

(1)常规思路(本质是迭代法):
计算链表长度,然后通过tmp交换奇偶项元素数值。在len>0的情况下,若为偶数项则将值置为前一项,若为奇数项则不变
(2)迭代法:
创建哑结点dummy,初始化tmp为dummy,当tmp后面的两项都不为nullptr才进行交换。下图展示具体操作细节:
在这里插入图片描述

代码

法一:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
// 常规思路
class Solution {
public:ListNode* swapPairs(ListNode* head) {int len = 0;ListNode* p = head;while (p != nullptr) {len++;p = p->next;}int tmp = -1;p = head;for (int i = 0; i < len - 1; i++) {if (i % 2 == 0) {tmp = p->val;p->val = p->next->val;} else {p->val = tmp;}p = p->next;}if (len > 0 && len % 2 == 0) {p->val = tmp;}return head;}
};

法二:

class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* dummy = new ListNode(0, head);ListNode* tmp = dummy;while (tmp->next != nullptr && tmp->next->next != nullptr) {ListNode* one = tmp->next;ListNode* two = tmp->next->next;tmp->next = two;one->next = two->next;two->next = one;tmp = one;}ListNode* ans = dummy->next;delete dummy;return ans;}
};

http://www.ppmy.cn/ops/13666.html

相关文章

卷积神经网络(CNN)

一、什么是卷积神经网络 二、结构 卷积神经网络的基本结构由以下几个部分组成&#xff1a;输入层&#xff08;input layer&#xff09;&#xff0c;卷积层&#xff08;convolution layer&#xff09;&#xff0c;池化层&#xff08;pooling layer&#xff09;&#xff0c;激活…

IDEA中添加servlet模板

官方代码链接 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java")import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException…

CX5120-0125倍福CPU模块维修PLC控制器CX5120全系列主机电脑深圳捷达工控维修

工业计算机服务与维修 为任何品牌的工业计算机、显示器、人机界面 (HMI) 和面板计算设备提供服务、维修和改造。您可以信赖我们延长生命周期&#xff0c;包括不再投放市场的产品。 工业计算机维修与保养 您的工业计算机专家 工业计算机维修服务 深圳捷达工控维修深知做好工业…

FreeRTOS学习 -- 任务

一、什么是任务系统 单片机裸跑的时候一般都是在main函数里面用 while (1) 做一个大循环来完成所有的处理&#xff0c;即应用程序是一个无限的循环&#xff0c;循环中调用相应的函数完成所需的处理。这个就是单任务系统&#xff0c;也称为前后台系统&#xff0c;中断服务函数作…

UniApp状态管理:从深入理解到灵活运用

在UniApp开发中&#xff0c;状态管理是一个至关重要的概念&#xff0c;它决定了应用程序的结构、性能和可维护性。本文将深入探讨UniApp中的状态管理&#xff0c;从基础知识到高级技巧&#xff0c;帮助开发者更好地理解和应用状态管理。 1. 什么是状态管理&#xff1f; 在Uni…

golang学习笔记(defer基础知识)

什么是defer defer语句用于golang程序中延迟函数的调用&#xff0c; 每次defer都会把一个函数压入栈中&#xff0c; 函数返回前再把延迟的函数取出并执行。 为了方便描述&#xff0c; 我们把创建defer的函数称为主函数&#xff0c; defer语句后面的函数称为延迟函数。延迟函数…

GPT-SoVITS声音克隆训练和推理(新手教程,附整合包)

环境: Win10 专业版 GPT-SoVITS-0421 整合包 问题描述: GPT-SoVITS声音克隆如何训练和推理教程 解决方案: Zero-shot TTS: Input a 5-second vocal sample and experience instant text-to-speech conversion.零样本 TTS:输入 5 秒的人声样本并体验即时文本到语音转换…

《机器学习by周志华》学习笔记-线性模型-02

1、对数几率回归 1.1、背景 上一节我们考虑了线性模型的回归学习,但是想要做分类任务就需要用到上文中的广义线性模型。 当联系函数连续且充分光滑,考虑单调可微函数,令: 1.2、概念 找一个单调可谓函数,将分类任务的真实标记与线性回归模型的预测值联系起来,也叫做「…