【算法分析与设计】交换两个节点

       📝个人主页:五敷有你      
 🔥系列专栏:算法分析与设计
⛺️稳中求进,晒太阳

题目

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

 示例

示例 1:

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

示例 2:

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

示例 3:

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

思路


这里我们需要三个指针,p,q,temp。
假设链表是
1->2->3->4->5->6
在迭代的时候,每次处理两个节点,于是第一轮 p指向 1,q 指向 2。
第二轮的时候 p 指向 3,q 指向 4。第三轮的时候 p 指向 5,q 指向 6。
我们通过 a.next = b.next,以及b.next=a就把两个指针的位置反转了,于是1->2就变成2->1。
但这里有一个细节需要处理,当我们第二轮迭代的时候,p 指向 3,q 指向 4。按照题目要求,最终应该是2->1->4->3。
也就是节点 1 需要跟节点 4 串起来,只有两个指针就没法弄了,所以需要第三个指针 tmp,用来记录上一轮 p 的位置,然后下一轮迭代的时候,将原先的 p(也就是节点 1)指向 4。

1.初始化:

申请一个节点,方便后续操作。

2.  p指向1 q指向2

3.  tmp.next = b;  a.next = b.next; (操作过程中不要丢失节点)

现在节点的顺序是2 1 3 4 

 不好看,那我转一下(是不是清晰多了) ,一次调换两个节点

 4. 接下来 temp和p q指向 1 ,来操作后两个节点,

代码实现

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {if(head==null){return null;}ListNode pre=new ListNode(-1);ListNode p=pre;ListNode q=pre;pre.next=head;ListNode temp=pre;while(q!=null&&q.next!=null&&q.next.next!=null){p=p.next;q=q.next.next;temp.next=q;p.next=q.next;q.next=p;temp=p;q=p;}return pre.next;}
}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/447749.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】 C++入门— 基于范围的 for 循环

C 基于范围的for循环1 使用样例2 使用条件3 完善措施 Thanks♪(・ω・)ノ谢谢阅读!下一篇文章见!!! 基于范围的for循环 1 使用样例 使用for循环遍历数组,我们通常这么写: …

八、硬盘(disk)

永久存储性设备:电脑硬盘、移动硬盘、U盘、机身内存… 世界第一块硬盘叫做350RAMAC,是1956年诞生的,IBM公司生产的,比冰箱大,1吨重,只有5MB的容量 1、机械硬盘(HDD) 机械硬盘(Hard Disk Drive,简…

数学建模比赛中,chatgpt、文心一言如何提问更有效?

在数学建模的战场上,ChatGPT和文心一言可是我们的“神助攻”!但想让它们发挥出最大威力,提问可是个技术活。问题问得好,答案跑不了;问题问得妙,解决没烦恼! 下面我就一个实际的对话为例&#x…

ele-h5项目使用vue3+vite开发:第二节、search 搜索框组件开发

如何设计一个组件 需求分析 布局 content left-iconbodyinput-controlright-iconaction 功能 使用 defineEmits 定义组件的事件 在组件的script setup 里如何定义事件 使用defineEmits&#xff08;&#xff09;定义先声明事件接口 <script setup lang"ts"> int…

[python] 过年燃放烟花

目录 新年祝福语 一、作品展示 二、作品所用资源 三、代码与资源说明 四、代码库 五、完整代码 六、总结 新年祝福语 岁月总是悄然流转&#xff0c;让人感叹时间的飞逝&#xff0c;转眼间又快到了中国传统的新年&#xff08;龙年&#xff09;。 回首过去&#xf…

【C语言】好题分享(2)

目录 一&#xff1a;转移表 —— 计算器的一般实现 我们来分析 代码实现 二&#xff1a;字符串旋转 我们来分析 代码实现 结语 一&#xff1a;转移表 —— 计算器的一般实现 题目&#xff1a;使用函数指针数组的实现简单的加减乘除计算器 我们来分析 计算器要能够实现加…

猫用空气净化器好吗?好用的养猫宠物空气净化器品牌推荐

作为一个养猫五年的资深铲屎官&#xff0c;我对如何轻松快乐地养猫有一些心得。猫咪每天在家里奔跑&#xff0c;导致家里经常会出现“猫毛雪”&#xff0c;沙发、地板和衣服都成了重灾区。在除猫毛的问题上&#xff0c;我真的尝试了各种方法&#xff0c;几乎用上了所有的技能。…

nightinage部署

git开源地址 GitHub - ccfos/nightingale: An all-in-one observability solution which aims to combine the advantages of Prometheus and Grafana. It manages alert rules and visualizes metrics, logs, traces in a beautiful web UI. 一、下载源码自己编译运行 二、用…

【技术分享】远程透传网关-单网口快速实现各类串口PLC程序远程上下载

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条&#xff0c;用于实现网络连接一台串口PLC及其编程软件一个9针串口头及连接线&#xff0c;用于连接PLC一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡&#xff0c;WIFI联网则将WI…

如何在Shopee平台上进行手机类目选品?

在Shopee平台上进行手机类目的选品是一个关键而复杂的任务。卖家需要经过一系列的策略和步骤&#xff0c;以确保选品的成功和销售业绩的提升。下面将介绍一些有效的策略&#xff0c;帮助卖家在Shopee平台上进行手机类目选品。 先给大家推荐一款shopee知虾数据运营工具知虾免费…

C++新特性 协程

本篇文章我们来讲述一下C协程 协程&#xff08;Coroutine&#xff09;是一种能够挂起个恢复的函数过程 是一种轻量级的并发编程方式&#xff0c;也称为用户级线程。它与传统的线程&#xff08;Thread&#xff09;相比&#xff0c;具有更低的开销和更高的执行效率。 协程通常运…

通过Netbackup恢复Oracle备份实操手册

1、系统环境描述 1 2、恢复前数据备份 2 2.1 在NBU上执行一次完整的备份 2 2.2 查看ORACLE的备份集 3 2.2.1在备份客户端上查看备份集 3 2.2.2在备份服务器netbackup上查看客户端备份集 4 3、本机恢复方法 5 3.1丢失SPFILE文件恢复方法 5 3.2丢失CONTROLFILE文件恢复方…