【算法与数据结构】24、LeetCode两两交换链表中的节点

news/2025/1/13 3:20:59/

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:题目要求两两交换节点。在链表当中非常重要就是下一个节点,一旦丢失,这个节点后面的节点也就找不到了。那么我们在需要再交换前后做好保存节点变量的工作,程序当中我们设置了两个临时变量,例如在[1 2 3 4]这个链表当中,第一次交换(交换1 2 节点),cur指向虚节点,tmp1指向第一个节点(也就是1),tmp2需要指向第三个节点,因此修改指针的过程中会丢失。首先,让cur节点指向第2个节点,第2个节点指向第1个节点,第1个节点指向第3个节点,这样就完成了第一次交换。其次,我们做更新操作,注意第一次交换是三个指针的相对位置(tmp1是cur的下一个节点,tmp2是tmp1的next next节点),因此下一次循环也循序这个规则
在这里插入图片描述

  程序如下

class Solution {
public:ListNode* swapPairs(ListNode* head) {ListNode* FakeNode = new ListNode(0, head);ListNode* tmp1;	// 临时变量ListNode* tmp2;	// 临时变量ListNode* cur = FakeNode;	// 头结点的下一个节点while (cur->next != NULL && cur->next->next != NULL) {// 更新tmp1 = cur->next;			// 保存第1个节点,虚节点是第0个节点tmp2 = tmp1->next->next;	// 保存第3个节点//交换cur->next = tmp1->next;		cur->next->next = tmp1;tmp1->next = tmp2;// 更新cur = tmp1;}return FakeNode->next;}
};

复杂度分析:

  • 时间复杂度: O ( n ) O(n) O(n)
  • 空间复杂度: O ( 1 ) O(1) O(1)

三、完整代码

# include <iostream>
using namespace std;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) {ListNode* FakeNode = new ListNode(0, head);ListNode* tmp1;	// 临时变量ListNode* tmp2;	// 临时变量ListNode* cur = FakeNode;	// 头结点的下一个节点while (cur->next != NULL && cur->next->next != NULL) {// 更新tmp1 = cur->next;			// 保存第1个节点,虚节点是第0个节点tmp2 = tmp1->next->next;	// 保存第3个节点//交换cur->next = tmp1->next;		cur->next->next = tmp1;tmp1->next = tmp2;// 更新cur = tmp1;}return FakeNode->next;}
};ListNode* ChainGenerator(int arr[], int len) {ListNode* head = new ListNode(arr[0], NULL);ListNode* p = head;for (int i = 1; i < len; i++) {ListNode* pNewNode = new ListNode(arr[i], NULL);p->next = pNewNode; // 上一个节点指向这个新建立的节点p = pNewNode; // p节点指向这个新的节点}return head;
}void my_print(ListNode* head, string str) {cout << str << endl;ListNode* cur = head;while (cur != NULL) {cout << cur->val << ' ';if (cur->next == NULL) break;cur = cur->next;}cout << endl;
}int main()
{//int arr[] = { 1,2,3,4 };int arr[] = { 1 };int len = sizeof(arr) / sizeof(int);Solution s1;ListNode* head = ChainGenerator(arr, len);my_print(head, "目标链表:");head = s1.swapPairs(head);my_print(head, "翻转后的链表:");system("pause");return 0;
}

end


http://www.ppmy.cn/news/314803.html

相关文章

JDK8-1-Lambda表达式(5)-复合 Lambda 表达式

JDK8-1-Lambda表达式&#xff08;5&#xff09;-复合 Lambda 表达式 JDK8 在 java.util.function 包下定义了一些默认的 函数式接口 &#xff0c;如 Predicate、Consumer、Function、 Comparator &#xff08;在 java.util.包下&#xff09; &#xff0c;这些接口提供了一些复…

UniApp组件封装

什么是UniApp组件&#xff1f; UniApp是一个跨平台的开发框架&#xff0c;允许开发者使用Vue.js编写一次代码&#xff0c;然后将其发布到多个平台&#xff0c;包括iOS、Android和Web。在UniApp中&#xff0c;组件是构建用户界面的基本单元&#xff0c;它们可以重复使用&#x…

Webots R2021a教程

文章目录 Windows安装设置中文打开世界添加贴图 为外部控制器配置Anaconda解决报错&#xff1a;CondaSSLError: Encountered an SSL error. Most likely a certificate verification issue.调用Python API Windows 安装 进入下载页面 https://github.com/cyberbotics/webots/r…

三星Android升级吗,三星Android 6.0升级名单一览 这次升级的系统有你的手机吗?

Android6.0 发布之后&#xff0c;三星公布了首批可升级的设备名单&#xff0c;然而让人失望的是去年的旗舰 S5 竟然不在其中&#xff0c;不过三星显然已经听到了用户的不满&#xff0c;在最新曝光的升级名单中&#xff0c;Galaxy S5 和 Galaxy Alpha 两款设备被加入第一批升级名…

三星手机出现红字your phone couldn’t start normally. some configuration data may be corrupt.

早上重启了一下三星S10手机出现如下情况 [caption id"attachment_321" align"alignnone" width"600"] 三星[/caption] 然后就再也开不了机了&#xff0c;选啥都没用. 选了第二个又出现这个 [caption id"attachment_322" align&quo…

linux怎么查询服务器信息,Linux查看服务器硬件信息的方法步骤

Hi&#xff0c;大家好&#xff1b;今天是双12,大家剁手了没。今天给大家带来的是《Linux查看服务器上的硬件信息》本篇文章的示例全部是在服务器(Inspur SA5112M4)上实现的&#xff0c;有些命令在虚拟机上达不到效果 查看服务器型号、序列号 rootzhangdaifu# dmidecode -s syst…

安卓应用在各大应用市场上架方法整理

想要把APP上架到应用市场都要先注册开发者账号才可以。这里的方法包括注册帐号和后期上架及一些需要注意的问题。注意&#xff1a;首次提交应用绝对不能随便删除&#xff0c;否则后面再提交会显示应用APP冲突&#xff0c;会要求走应用认领流程&#xff0c;那个时候就会相当麻烦…

Alexa Top 1000 在中国的访问情况

记录日期&#xff1a;2018.9.27 标题测试开始于Censored*google.com3月 2011100%youtube.com2月 2011100%facebook.com2月 2011100%twitter.com2月 2011100%instagram.com5月 2012100%google.co.in2月 2011100%blogspot.com2月 2011100%pornhub.com3月 2011100%google.ru3月 2…