C++实现算法题之奇偶链表

2023-11-12

题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。
请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

示例 1:
输入: 1->2->3->4->5->NULL
输出 : 1->3->5->2->4->NULL
示例 2 :
输入 : 2->1->3->5->6->4->7->NULL
输出 : 2->3->6->7->1->5->4->NULL

#include <iostream>

using namespace std;

struct ListNode
{
	int val;
	ListNode *next;
	ListNode(int _val) :val(_val), next(nullptr) {}
};

// 分离节点后合并
ListNode* oddEvenList(ListNode* head)
{
	// 如果链表为空,则直接返回链表。
	if (head == nullptr)
	{
		return head;
	}

	ListNode* evenHead = head->next;
	// odd = head是奇数节点
	ListNode* odd = head;
	// even = head->next是偶数节点
	ListNode* even = evenHead;

	// 通过迭代的方式将奇数节点和偶数节点分离成两个链表,每一步首先更新奇数节点,然后更新偶数节点。
	while (even != nullptr && even->next != nullptr)
	{
		// 更新奇数节点时,奇数节点的后一个节点需要指向偶数节点的后一个节点
		// 此时 odd 变成 even 的后一个节点。
		odd->next = even->next;
		odd = odd->next;

		// 更新偶数节点时,偶数节点的后一个节点需要指向奇数节点的后一个节点
		// 此时 even 变成 odd 的后一个节点。
		even->next = odd->next;
		even = even->next;
	}
	// 将偶数链表连接在奇数链表之后,即完成了奇数链表和偶数链表的合并
	odd->next = evenHead;

	return head;
}

int main()
{
	// 创建链表
	ListNode* head = new ListNode(1);
	ListNode* node1 = new ListNode(2);
	ListNode* node2 = new ListNode(3);
	ListNode* node3 = new ListNode(4);
	ListNode* node4 = new ListNode(5);

	head->next = node1;
	node1->next = node2;
	node2->next = node3;
	node3->next = node4;
	node4->next = nullptr;

	// 奇偶链表
	head = oddEvenList(head);

	// 打印链表
	while (head != nullptr)
	{
		cout << head->val << endl;
		head = head->next;
	}

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++实现算法题之奇偶链表 的相关文章

随机推荐

  • 配置文件(properties类)

    基本介绍 1 专门用于读写配置文件的集合类 配置文件格式 键 值 2 注意 键值对 不需要空格 值 不需要用引号 默认类型 String 3 Properties的常见方法 1 load 加载配置文件的键值对到Properties对象 2
  • Win11怎么设置电脑开机密码和锁屏密码

    相信很多用户都已经用上了微软公司为大家提供的全新Win11系统了 Win11与Win10系统有很大区别 不仅仅体现在界面设计和UI上面 狠多以前Win10用户固定的功能有些取消了 有些挪位置了 这让用惯了Win10系统的用户非常不习惯 下面
  • Lua和C++交互详细总结

    转自 http cn cocos2d x org tutorial show id 1474 一 Lua堆栈 要理解Lua和C 交互 首先要理解Lua堆栈 简单来说 Lua和C C 语言通信的主要方法是一个无处不在的虚拟栈 栈的特点是先进后
  • Scrum猪和鸡的故事

    本文转载至 http blog csdn net fen0707 article details 8979942 一天 一头猪和一只鸡在路上散步 鸡看了一下猪说 嗨 我们合伙开一家餐馆怎么样 猪回头看了一下鸡说 好主意 那你准备给餐馆卖什么
  • Java Error org.apache.thrift.transport.TTransportException

    org apache thrift transport TTransportException java net ConnectException Connection refused connect org apache thrift t
  • 利用Python绘制中国新型冠状病毒疫情图(国家和省)

    大数据课程设计上来就要求绘制一个地图可以反应出来中国各个省份每日疫情的人数 包括确诊 疑似 死亡 治愈 如下图所示 这里用到了Python中的pyecharts库 点此了解详细信息 1 先来将需要的模块导入进来 import request
  • Windows 系统上如何安装 Python 环境(详细教程)

    一 下载 64位下载链接 https www python org ftp python 3 7 9 python 3 7 9 amd64 exe 32位下载链接 https www python org ftp python 3 7 9
  • QCheckBox复选框状态设置、信号绑定

    一 QCheckBox有两种设置状态 1 setCheckState Qt Checked 设置状态并且发送信号出去 eg for auto itr m mCheckBoxNum begin itr m mCheckBox end itr
  • (Java)leetcode-814 Binary Tree Pruning(二叉树剪枝)

    题目描述 给定二叉树根结点 root 此外树的每个结点的值要么是 0 要么是 1 返回移除了所有不包含 1 的子树的原二叉树 节点 X 的子树为 X 本身 以及所有 X 的后代 示例1 输入 1 null 0 0 1 输出 1 null 0
  • JDBC工作原理

    JDBC程序描述为包含如下过程的应用 1 引入一个必要的类2 加载JDBC驱动程序3 标识数据源 URL Username Password 4 分配一个Connection对象5 分配一个Statement对象6 使用该Statement
  • 阿里云部署Stable Diffusion

    系列文章目录 本地部署Stable Diffusion教程 亲测可以安装成功 Stable Diffusion界面参数及模型使用 谷歌Colab云端部署Stable Diffusion 进行绘图 文章目录 系列文章目录 前言 一 AIGC是
  • 外挂原理

    一 前言 所谓游戏外挂 其实是一种游戏外辅程序 它可以协助玩家自动产生游戏动作 修 改游戏网络数据包以及修改游 戏内存数据等 以实现玩家用最少的时间和金钱去完成功力升级和过关斩将 虽然 现 在对游戏外挂程序的 合法 身份众说纷纭 在这里我不
  • 数据结构——二叉树 增加、删除、查询

    二叉树系统 public class BinarySystem public static void main String args BinaryDomain root null 定义头结点 new BinaryAction manage
  • 1489. 田忌赛马(贪心)

    这是中国历史上的一个著名故事 大约 2300 年前 田忌是齐国的一位将军 他喜欢与国王等人赛马 田忌和国王都有三匹不同等级的马 下马 中马 上马 规则是一场比赛要进行三个回合 每匹马进行一回合的较量 单回合的获胜者可以从失败者那里得到 20
  • 树的算法总结

    写在前言 感谢代码随想录博主 博主是c 代码 此刷题总结是java代码 下文是我学习博主刷题记录的笔记 递归三部曲 找终止条件 什么时候递归到头了 思考返回值 每一级递归应该向上返回什么信息 单步操作应该怎么写 因为递归就是大量的调用自身的
  • java pc计数器_java虚拟机-程序计数器PC Register

    什么是程序计数器 程序计数器是一块 较小 的内存空间 它可以看做是当前线程所执行的字节码的 行号指示器 在虚拟机的概念模型里 仅仅是概念模型 各种虚拟机可能会通过一些更高效的方式去实现 字节码解释器工作时 就是通过改变这个计数器的值来选取下
  • 护网面试总结

    怎么确定一个网站是不是站库分离 1 查询web服务器名 LENOVO GH select servername 2 查询数据库服务器名 DESKTOP 1HV select host name 对比两个查询结果 即可判断 相同则同站同库 不
  • 【杂谈】如果你也23岁

    23岁的时候 你是什么状态 匿名用户 23岁那年 就是去年 在22岁的时候我毕业 同时第二年准备考研 结果因为压力太大 期望太高 又失利了 但是我依然满怀信心和憧憬 在我23岁那年四月 当我深爱的女孩 在这之前我追了她四年 说她要去北京时
  • APP常见崩溃原因和测试方法整理

    APP常见崩溃原因和测试方法整理 测试过APP的人都应该发现 app崩溃是一类非常常见的问题 很多时候还是致命性的 这就要求我们测试人员要尽最大可能去找出软件当中的缺陷 减少app崩溃出现的概率 这里我将收集到的关于针对APP崩溃测试的资料
  • C++实现算法题之奇偶链表

    题目 给定一个单链表 把所有的奇数节点和偶数节点分别排在一起 请注意 这里的奇数节点和偶数节点指的是节点编号的奇偶性 而不是节点的值的奇偶性 示例 1 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL 输出 1 gt 3 g