C语言笔试题之重排链表

重排链表

实例要求

  • 1、给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln - 1 → Ln
  • 2、请将其重新排列后变为:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
  • 3、不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换;
  • 示例:
    在这里插入图片描述

实例分析

  • 1、找到链表的中间节点,可以使用快慢指针法
  • 2、将链表分为两部分,前半部分和后半部分。
  • 3、将后半部分反转。
  • 4、将两个部分交替合并

示例代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
void reorderList(struct ListNode* head) {if (head == NULL || head->next == NULL || head->next->next == NULL) return;// 快慢指针找中间节点struct ListNode *slow = head;struct ListNode *fast = head;while (fast->next != NULL && fast->next->next != NULL) {slow = slow->next;fast = fast->next->next;}// 将链表分为两部分struct ListNode *secondHalf = slow->next;slow->next = NULL;// 反转后半部分链表struct ListNode *prev = NULL;struct ListNode *curr = secondHalf;struct ListNode *nextNode;while (curr != NULL) {nextNode = curr->next;curr->next = prev;prev = curr;curr = nextNode;}secondHalf = prev;// 合并两个部分struct ListNode *firstHalf = head;while (secondHalf != NULL) {struct ListNode *nextFirst = firstHalf->next;struct ListNode *nextSecond = secondHalf->next;firstHalf->next = secondHalf;secondHalf->next = nextFirst;firstHalf = nextFirst;secondHalf = nextSecond;}
}

运行结果

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

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

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

相关文章

鸿蒙OpenHarmony【轻量系统 编译】 (基于Hi3861开发板)

编译 OpenHarmony支持hb和build.sh两种编译方式。此处介绍hb方式,build.sh脚本编译方式请参考[使用build.sh脚本编译源码]。 使用build.sh脚本编译源码 进入源码根目录,执行如下命令进行版本编译。 ./build.sh --product-name name --ccache 说明&…

02.Scala简单演示

Scala创建对象的方法与Java有所不同 class可以直接传入形参; 形式为 变量名称:变量类型 逗号隔开 ** ** 方法定义也比较特殊 ** ** def方法名():返回值 { } 其中返回值Unit 等价于Java中的void

文献速递:肺癌早期诊断---低剂量胸部计算机断层扫描上的三维深度学习端到端肺癌筛查

Title 题目 End-to-end lung cancer screening with three-dimensional deep learning on low-dose chest computed tomography 低剂量胸部计算机断层扫描上的三维深度学习端到端肺癌筛查 01文献速递介绍 2018年估计有160,000例死亡病例,肺癌是美国最常见的癌症…

【Leetcode】vector刷题

🔥个人主页:Quitecoder 🔥专栏:Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接:136.只出现一…

Kafka 3.x.x 入门到精通(05)——对标尚硅谷Kafka教程

Kafka 3.x.x 入门到精通(05)——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.5 存储消息2.6 消费消息2.6.1 消费消息的基本步骤2.6.2 消费消息的基本代码2.6.3 消费消息的基本原理2.6.3.1消费者组2.6.3.1.1 消费…

C语言----单链表的实现

前面向大家介绍了顺序表以及它的实现,今天我们再来向大家介绍链表中的单链表。 1.链表的概念和结构 1.1 链表的概念 链表是一种在物理结构上非连续,非顺序的一种存储结构。链表中的数据的逻辑结构是由链表中的指针链接起来的。 1.2 链表的结构 链表…

[Diffusion Model笔记] DDPM数学推导版 2024.04.23

本文是观看以下视频的笔记: https://www.bilibili.com/video/BV1CU4y1i7jn/?p4&spm_id_frompageDriver 其他参考 https://zhuanlan.zhihu.com/p/614147698 https://zhuanlan.zhihu.com/p/563661713 这个写的非常详细: https://www.zhihu.com/ques…

成都爱尔胡建斌院长提醒视网膜脱离并非立即失明!这些征兆要注意!

大家都知道视网膜脱离危险,它的危险在于视网膜脱离后外层视网膜得不到脉络膜的血液供应,未及时复位视网膜感光细胞就会发生凋亡,视力发生缺损。 视网膜脱离对视力的影响是与病程同步的,发病初期眼前多有黑影、漂浮物、闪光感或幕…

十七、Java网络编程(一)

1、Java网络编程的基本概念 1)网络编程的概念 Java作为一种与平台无关的语言,从一出现就与网络有关及其密切的关系,因为Java写的程序可以在网络上直接运行,使用Java,只需编写简单的代码就能实现强大的网络功能。下面将介绍几个与Java网络编程有关的概念。 2)TCP/IP协议概…

2024年03月CCF-GESP编程能力等级认证Python编程三级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共15题,共30分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是( ) A.小程序 B.计时器 C.操作系统 D.神话人物 答…

江苏开放大学2024年春《机械CAD/CAM 050097》第三次在线作业参考答案

单选题 1数控编程技术包含了数控加工与编程、金属加工工艺、CA/CA软件操作等多方面的知识,其主要任务就是计算加工走刀中的__________。 A刀具终点 B刀位点 C刀具起点 D刀具中点 答案是:B 2操作人员在CAD/CA系统中起____________作用。 …

认识HTTP

HTTP缺点 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,可能遭遇伪装 无法证明报文的完整性,所以有可能遭篡改 一、通信使用明文(不加密),内容可能会被窃听 TCP/…