数据结构每日一题day15(链表)★★★★★

题目描述:将一个带头结点的单链表A分解为两个带头结点的单链表A和 B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持相对顺不变,最后返回 B 表。

算法思想:

1.初始化:

创建新链表 B 的头结点。

定义指针 p 遍历原链表 A,tailA 指向 A 的当前尾节点,tailB 指向 B 的当前尾节点。

使用计数器 count 标记当前节点的序号(从 1 开始)。

2.遍历原链表:

如果 count 为奇数,将当前节点保留在 A 中,并更新 tailA。

如果 count 为偶数,将当前节点移动到 B 中,并更新 tailB。

每次处理后,p 后移,count 递增。

3.修正尾指针:

遍历结束后,确保 A 和 B 的尾节点的 next 均为 NULL。

4.返回链表 B。

复杂度分析:

时间复杂度:O(n)

空间复杂度:O(1)

代码实现:

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node *next;
} Node, *LinkedList;// 分解链表 A,返回链表 B
LinkedList splitList(LinkedList A) {LinkedList B = (LinkedList)malloc(sizeof(Node)); // 创建 B 的头结点B->next = NULL;Node *p = A->next;    // 遍历原链表的指针Node *tailA = A;      // A 的尾指针Node *tailB = B;      // B 的尾指针int count = 1;        // 节点序号计数器while (p != NULL) {if (count % 2 == 1) {// 奇数序号:保留在 A 中tailA->next = p;tailA = p;} else {// 偶数序号:移动到 B 中tailB->next = p;tailB = p;}p = p->next;count++;}// 确保 A 和 B 的尾节点 next 为 NULLtailA->next = NULL;tailB->next = NULL;return B;
}// 打印链表
void printList(LinkedList L) {Node *p = L->next;while (p != NULL) {printf("%d ", p->data);p = p->next;}printf("\n");
}int main() {// 创建测试链表 A: 1 -> 2 -> 3 -> 4 -> 5LinkedList A = (LinkedList)malloc(sizeof(Node));Node *node1 = (Node *)malloc(sizeof(Node));Node *node2 = (Node *)malloc(sizeof(Node));Node *node3 = (Node *)malloc(sizeof(Node));Node *node4 = (Node *)malloc(sizeof(Node));Node *node5 = (Node *)malloc(sizeof(Node));A->next = node1;node1->data = 1; node1->next = node2;node2->data = 2; node2->next = node3;node3->data = 3; node3->next = node4;node4->data = 4; node4->next = node5;node5->data = 5; node5->next = NULL;printf("原链表 A: ");printList(A);LinkedList B = splitList(A);printf("分解后 A (奇数序号): ");printList(A);printf("分解后 B (偶数序号): ");printList(B);// 释放内存(实际使用时需完善)free(A); free(B);free(node1); free(node2); free(node3); free(node4); free(node5);return 0;
}

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

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

相关文章

【杂谈】-探索 NVIDIA Dynamo 的高性能架构

探索 NVIDIA Dynamo 的高性能架构 文章目录 探索 NVIDIA Dynamo 的高性能架构1. 大规模人工智能推理的日益严峻的挑战2. 使用 NVIDIA Dynamo 优化 AI 推理3. 实际应用和行业影响4. 竞争优势&#xff1a;Dynamo 与其他方案对比5. 总结 随着人工智能&#xff08;AI&#xff09;技…

postgresql数据库基本操作

1. 连接 PostgreSQL 数据库 首先&#xff0c;使用 psql 命令行工具连接到数据库。如果是本地连接&#xff0c;命令格式如下&#xff1a; psql -U postgres -d <数据库名称> -h <主机地址>其中&#xff1a; -U postgres&#xff1a;表示以 postgres 用户身份登录…

工业大模型:从设备诊断到工艺重构

引言 工业大模型正在引发制造业认知革命。据埃森哲研究,到2026年全球工业大模型市场规模将突破280亿美元,其中工艺优化应用占比达42%。本文将系统解析工业大模型的"预训练-领域适配-应用落地"技术路径,并通过设备健康诊断与工艺参数生成的实践案例,展示如何构建…

PyQt5基本介绍

PyQt5是基于Digia公司强大图形框架Qt5的python接口&#xff0c;由一组python模块构成。是一个用于创建桌面应用程序的Python库&#xff0c;它是Qt图形用户界面工具包的Python绑定。 Qt是一个跨平台的C库&#xff0c;提供了一套丰富的工具和功能&#xff0c;用于开发图形用户界…

Tire 树(字典树/前缀树)

一、定义与结构 用来快速存储查找字符串集合的一种数据结构 将字符串按顺序连接根节点上&#xff0c;并在字符串结束的地方打上标记并计数。 二、模板题 acwing 835 Trie 树的字符串统计 题目&#xff1a; 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向…

【时时三省】(C语言基础)怎样定义和引用一维数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 一维数组是数组中最简单的&#xff0c;它的元素只需要用数组名加一个下标&#xff0c;就能唯一地确定。如上面介绍的学生成绩数组s就是一维数组。有的数组&#xff0c;其元素要指定两个下标才…

编译faiss

编译faiss-1.10.0 首先确保自己cmake的版本&#xff1a; cmake --version 确保其版本至少为CMake 3.24.0 or higher is required。 其次安装OpenBLAS&#xff1a; https://github.com/OpenMathLib/OpenBLAS 去这里去安转Openblas内容&#xff0c;然后确保自己的CPU的指令集是存…

Linux 入门:操作系统进程详解

目录 一.冯诺依曼体系结构 一&#xff09;. 软件运行前为什么要先加载&#xff1f;程序运行之前在哪里&#xff1f; 二&#xff09;.理解数据流动 二.操作系统OS(Operator System) 一&#xff09;.概念 二&#xff09;.设计OS的目的 三&#xff09;.如何理解操作系统…

word交叉引用图片、表格——只引用编号的处理方法

交叉引用图片/表格 在“引用”选项卡上的“题注”组中&#xff0c;单击“插入题注”。勾选【从题注中排除标签】。在文中插入题注。 【注 意】 这时候插入的题注只有编号项了。然后手动打上标签【TABLE】&#xff0c;并在标签和编号项之间加上【样式分隔符&#xff0c;AltCt…

rails 8 CSS不起效问题解决

很久没用rails了&#xff0c;最近打算重新复习一下。在配置好环境后&#xff0c;创建了项目&#xff0c;通过脚手架创建了数据库表&#xff0c;和相关的文件。但我发现却没有生成相应的CSS文件&#xff0c;可能是rails8 取消了吧。于是自己手动创建了相应的css文件。但是刷新页…

【nlohmann\json.hpp】‘_snprintf‘: is not a member of ‘std‘

这个问题时有发生但是为啥现在更新了vs2022 后,发生了这些报错:2>(compiling source file ../worker/src/fargo/PacedVideoSenderGo.cpp) 2>D:\XTRANS\thunderbolt\ayame

数据结构--【二叉树】

目录 定义结构体&#xff1a; 初始化&#xff1a; 手动创建一个二叉树&#xff1a; 前序遍历&#xff1a; 中序遍历&#xff1a; 后序遍历 二叉树节点个数&#xff1a; 叶子节点个数&#xff1a; 二叉树第k层节点个数&#xff1a; 二叉树的高度&#xff1a; 查找值为x…

深入解析Linux进程间通信(IPC):机制、应用与最佳实践

引言 在多任务操作系统中&#xff0c;进程间通信&#xff08;Inter-Process Communication, IPC&#xff09;是协同工作的核心机制。Linux作为现代操作系统的典范&#xff0c;提供了8种主要IPC方式&#xff0c;从传统的管道到面向网络的套接字&#xff0c;每种方法都暗藏独特的…

2025年“深圳杯”数学建模挑战赛B题-LED显示屏颜色转换设计与校正

LED显示屏颜色转换设计与校正 小驴数模 问题的背景 走在晚风都市&#xff0c;或春日田野&#xff0c;我们都会看到一个色彩斑斓的世界。色彩是我们对世界一种重要感知。什么是色彩&#xff0c;或颜色&#xff1f;颜色是光作用于人眼引起的视觉感知现象&#xff0c;它与物体的…

Java学习手册:Spring MVC 架构与实现

一、Spring MVC 概述 Spring MVC 是 Spring 框架的一个模块&#xff0c;它提供了一套 Web 应用开发的解决方案&#xff0c;实现了 MVC&#xff08;Model-View-Controller&#xff09;设计模式。Spring MVC 提供了清晰的分离逻辑层、视图层和控制器层的结构&#xff0c;便于开发…

【TF-BERT】基于张量的融合BERT多模态情感分析

不足&#xff1a;1. 传统跨模态transformer只能处理2种模态&#xff0c;所以现有方法需要分阶段融合3模态&#xff0c;引发信息丢失。2. 直接拼接多模态特征到BERT中&#xff0c;缺乏动态互补机制&#xff0c;无法有效整合非文本模态信息 改进方法&#xff1a;1. 基于张量的跨模…

maven坐标导入jar包时剔除不需要的内容

maven坐标导入jar包时剔除不需要的内容 问题描述解决方案 问题描述 maven坐标导入jar包时剔除不需要的内容 解决方案 Spring Boot 默认使用 Logback&#xff0c;需在 pom.xml 中排除其依赖&#xff1a; <dependency><groupId>org.springframework.boot</gro…

C与指针——输入输出

错误定位 当一个库函数出错时&#xff0c;errno会被重置 perror(const char* s);\\输出s: errno 对应的错误信息 \\如果单独想要错误信息可以 char* e strerror(errno);\\系统错误码转换为对应的错误信息字符串输出缓冲区 一般输出缓冲区满的时候才刷新&#xff0c;也就是…

JSON Web Token 默认密钥 身份验证安全性分析 dubbo-admin JWT硬编码身份验证绕过

引言 在web开发中&#xff0c;对于用户认证的问题&#xff0c;有很多的解决方案。其中传统的认证方式&#xff1a;基于session的用户身份验证便是可采用的一种。 基于session的用户身份验证验证过程&#xff1a; 用户在用进行验证之后&#xff0c;服务器保存用户信息返回sess…

STM32GPIO输出实战-LED模板

STM32GPIO输出实战-LED模板 一&#xff0c;LED控制原理1&#xff0c;LED控制时GPIO的配置2&#xff0c;LED连接方式3&#xff0c;使用HAL库控制LED的常用函数&#xff1a; 二&#xff0c;任意控制LED模板1&#xff0c;Led底层2&#xff0c;代码详细解析 三&#xff0c;实用技巧…