C语言面试题之奇偶链表

奇偶链表

实例要求

  • 1、给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表;
  • 2、第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推;
  • 3、注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致;
  • 4、必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题;
  • 示例:
    在这里插入图片描述

实例分析

  • 1、对输入的链表进行了边界检查,如果链表为空或者只有一个节点,则直接返回原链表;
  • 2、初始化四个指针,oddHead指向奇数索引链表的头节点,evenHead指向偶数索引链表的头节点,oddPtr和evenPtr分别指向当前奇数索引链表和偶数索引链表的末尾节点;
  • 3、使用while循环遍历链表,每次循环将奇数索引节点的下一个节点连接到奇数索引链表的末尾,然后将奇数索引指针移动到刚刚添加的节点;
  • 4、将偶数索引节点的下一个节点连接到偶数索引链表的末尾,然后将偶数索引指针移动到刚刚添加的节点;
  • 5、将奇数索引链表的尾部连接到偶数索引链表的头部,形成最终的链表;
  • 6、返回奇数索引链表的头部,作为重新排序后的链表;

示例代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* oddEvenList(struct ListNode* head) {if (head == NULL || head->next == NULL) {return head;}// 分别初始化奇数索引链表和偶数索引链表的头节点struct ListNode *oddHead = head;struct ListNode *evenHead = head->next;struct ListNode *oddPtr = oddHead;struct ListNode *evenPtr = evenHead;// 遍历链表,将奇数索引节点和偶数索引节点分别连接起来while (evenPtr != NULL && evenPtr->next != NULL) {oddPtr->next = evenPtr->next;oddPtr = oddPtr->next;evenPtr->next = oddPtr->next;evenPtr = evenPtr->next;}// 将奇数索引链表的尾部连接到偶数索引链表的头部,形成最终的链表oddPtr->next = evenHead;return oddHead;
}

运行结果

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

单链表接口函数的实现(增删查改)

一、单链表的实现形式以及接口函数的声明 #include<stdio.h> #include<stdlib.h> #include<assert.h> typedef int DataType ;typedef struct SListNode {DataType data;struct SListNode* next; }SLTNODE; void SLTPrint(SLTNODE* phead);//打印链表 SLTNO…

Wpf 使用 Prism 实战开发Day20

备忘录功能页面完善以及优化 备忘录功能基本跟前一章节的待办事项差不多一至&#xff0c;就不再做过多的笔述了 一.备忘录功能完整页面源码 MemoView.xaml <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2006/xam…

33、链表-排序链表

思路&#xff1a; 首先排序可以使用集合将所有节点放入集合中&#xff0c;然后再根据每个节点值进行排序。这个可以很容易做到&#xff0c;不再赘述 其次就是直接在链表上排序&#xff0c;如何排序可以使用归并排序的方式&#xff0c;代码如下&#xff1a; class Solution {…

opencv | 编译缺失ippicv相关文件解决方案

1.执行cmake后&#xff0c;查看控制台输出信息 ~/VM_data/opencv-4.9.0$ cd buile_temp ~/VM_data/opencv-4.9.0/buile_temp$ cmake ..2.去浏览器打开链接&#xff0c;下载对应的压缩包&#xff0c;解压到 路径&#xff1a;/3rdparty/ippicv/

CSS3 animation-delay 属性

CSS3 animation-delay 属性 实例 等待两秒&#xff0c;然后开始动画&#xff1a; animation-delay:2s; -webkit-animation-delay:2s; /* Safari 和 Chrome */标签定义及使用说明 animation-delay 属性定义动画什么时候开始。 animation-delay 值单位可以是秒&#xff08;s&…

Java多线程(一些常用方法

今天学了一点多线程&#xff0c;感觉有点乱乱的 一.有三种方法可以实现多线程 1.继承Thread类&#xff1b; 直接继承Thread类&#xff0c;重写run方法 package a0415; //第一种执行方法&#xff08;继承Thread类的方法进行实现&#xff09; public class Test1 {public sta…

​LeetCode解法汇总2924. 找到冠军 II

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 一场比赛中共有 n 支队伍&#xff0c;按从…

【云计算】安全组和网络ACL的区别

安全组和网络ACL的区别 ACL&#xff08;Access Control List&#xff09;和 安全组&#xff08;Security Group&#xff09;是两种不同的网络安全控制机制&#xff0c;通常用于管理云计算平台中的网络访问权限。它们在功能和实现上有一些显著的区别&#xff1a; 辨析 范围不同&…

数据库-Redis(16)

目录 76.新的主库选择出来后,如何进行故障的转移? 77.Redis事件机制? 78.Redis文件事件的模型? 79.什么是Redis发布订阅?

ASP.NET MVC企业级程序设计 (EF+三层架构+MVP实现查询数据)

目录 效果图 实现过程 1创建数据库 2创建项目文件 3创建控制器&#xff0c;右键添加&#xff0c;控制器 ​编辑 注意这里要写Home​编辑 创建成功 数据模型创建过程之前作品有具体过程​编辑 4创建DAL 5创建BLL 6创建视图&#xff0c;右键添加视图 ​编辑 7HomeContr…

【zookeeper】安装

第二次安装zookeeper了&#xff0c;蛮记录一下&#xff08;让blog丰富一点~&#xff09; 1. Apache Zookeeper官网下载 2. 解压后创建log和data文件夹 这个其实不一定要建在zookeeper文件夹下&#xff0c;建在任意一个文件夹里都行&#xff0c;只要配置文件中的路径配置能找到…

Spark面试整理-Spark部署和集群管理

Apache Spark的部署和集群管理是Spark应用的关键组成部分,它决定了如何在分布式环境中运行和管理Spark作业。Spark支持多种部署模式和集群管理器,以适应不同的需求和环境。以下是Spark部署和集群管理的主要方面: 部署模式 本地模式:在单个机器上运行Spark。适用于开发和测试…

软件设计不是CRUD(18):像搭积木一样搭建应用系统(上)——单个应用系统的搭建过程

1、概述 之前的文章本专题花了大量文字篇幅,介绍如何基于业务抽象的设计方式完成应用系统各个功能模块的设计工作。而之所以进行这样的功能模块设计无非是希望这些功能模块在具体的项目实施过程中,能够按照当时的需求快速的、简易的、稳定的、最大可能节约开发成本的形成可用…

图论-欧拉图

欧拉图是一种特殊的图,它具有一个有趣的性质:可以通过图中的一条路径访问图中的每一条边恰好一次,并且最终回到起点。这种路径被称为欧拉路径。如果图是连通的,则存在一条欧拉路径的图称为欧拉图。 欧拉图的判定算法基于以下定理: 定理:一个无向图是欧拉图,当且仅当该图中每个…

设计模式之观察者模式(上)

观察者模式 1&#xff09;概述 1.定义 定义对象之间的一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 观察者模式的别名包括发布-订阅&#xff08;Publish/Subscribe&#xff09;模式、模型-视图&#…

PCB整理

1.加工工艺流程&#xff1a; 开料磨边 、烘板、内光成像、内层腐刻、内层AOI、内层黑化、层压、钻孔、沉铜加厚、外光成像、外层腐刻、外层AOI、印阻焊、阻焊成像、丝印字符、涂覆保护层、二次钻孔、外形加工、电测试、烘板包装。 2.层叠结构&#xff1a; 3.基材&#xff1a;覆…

开源模型应用落地-chatglm3-6b-gradio-入门篇(七)

一、前言 早前的文章&#xff0c;我们都是通过输入命令的方式来使用Chatglm3-6b模型。现在&#xff0c;我们可以通过使用gradio&#xff0c;通过一个界面与模型进行交互。这样做可以减少重复加载模型和修改代码的麻烦&#xff0c; 让我们更方便地体验模型的效果。 二、术语 2.…

2024蓝桥A组E题

成绩统计 问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序难度等级 问题描述 题目有问题方差定义那加平方&#xff08;vi-v&#xff09; 格式输入 输入的第一行包含三个正整数n,k,T &#xff0c;相邻整数之间使用一个空格分隔。 第二行包含n个正整数…

缓存预热和刷新的具体操作方式

缓存预热的具体操作方式 1. 数据准备 识别需要预热的数据&#xff1a;这通常是应用程序的热点数据或基础数据&#xff0c;即用户访问频率较高的数据。从数据源&#xff08;如数据库&#xff09;中获取这些数据&#xff0c;并将其转换成适合缓存存储的格式。 2. 数据存储 使…

SpringBoot+vue前后端分离

1.前端查询&#xff08;传递封装的参数&#xff09; loadPost(){this.$axios.post(this.$httpUrl/user/listPageC1,{pageSize:this.pageSize,pageNum:this.pageNum,param:{name:this.name,sex:this.sex}}).then(res>res.data).then(res>{console.log(res)if(res.code200)…