C语言笔试题之重排链表

news2024/12/24 0:52:46

重排链表

实例要求

  • 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.coloradmin.cn/o/1627809.html

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

相关文章

Java八种包装类、常量池

文章目录 一、八种基本数据类型及其包装类1.1 类型详解1.2 基本类型与包装类型相互转换——自动装箱拆箱 二、Java常量池三、包装类的常量池技术(缓存池)3.1 各包装类缓冲池范围3.2 Integer i1new Integer(5) 与 Integer i25 的区别3.3 Integer.valueOf(…

ADOP带您科普什么是单纤双向BiDi光模块?一根光纤,双向通信:单纤双向模块的革命性技术。

单纤双向光模块(也称为BiDi光模块)是一种使用WDM(波分复用)双向传输技术的光模块,它在一根光纤上实现了同时进行光通道内的双向传输。相比常规光模块(有两个光纤插孔),BiDi光模块只有…

playwright 使用

pip install playwright 是一个命令,用于通过 Python 的包管理工具 pip 安装 Playwright 库。Playwright 是一个用于端到端网页测试的库,支持多种浏览器,包括 Chromium、Firefox 和 WebKit。 执行 pip install playwright 命令后&#xff0c…

SCSS全局配置 vue项目(二)

目录 1、先要查看node版本 2、安装对应的node-sass、sass-loader版本 2.1根据项目使用的node版本安装对应的node-sass版本 2.2根据node-sass版本选择兼容的sass-loader版本,不然项目无法正常运行 3、在 vue.config.js 中配置: 4、在组件中…

全志ARM-官方库SDK安装和验证

进入界面,输入以下指令 git clone https://github.com/orangepi-xunlong/wiringOP //下载源码 cd wiringOP //进入文件夹 sudo ./build clean //清除编译信息 sudo ./build …

Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

Kubernetes - CentOS7搭建k8s集群高可用(kubeadm/二进制包部署方式)实测配置验证手册 前言概述: 一、Kubernetes—k8s是什么 Kubernetes 这个名字源于希腊语,意为“舵手“或”飞行员"。 Kubernetes,简称K8s&#…

​解析什么是物联网接入网关?-天拓四方

随着物联网技术的飞速发展,越来越多的设备、传感器和系统被连接到互联网,形成了一个庞大的、相互连接的智能网络。在这个网络中,物联网接入网关扮演着至关重要的角色,它不仅是连接物联网设备和云平台的桥梁,还是实现设…

iOS——NSCache

什么是NSCache NSCache是Foundation框架中的一个类,用于在iOS和macOS应用程序中进行临时性的内存缓存。它提供了一种轻量级的缓存机制,可以用于存储临时性的数据,例如图片、对象等。NSCache的主要特点和用法包括: 临时性缓存&…

【MyBatisPlus】一、公共字段填充配置

目录 一、实体类配置 二、配置MyBatis Plus元对象处理器 三、接口字段自动填充 在使用mybatisplus项目中设置公共字段填充,可以按如下进行配置 一、实体类配置 TableField(value "create_time",fill FieldFill.INSERT)private LocalDateTime createTime…

《苍穹外卖》Day10部分知识点记录

一、Spring Task 介绍 Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位:定时任务框架 作用:定时自动执行某段Java代码 应用场景:只要是需要定时处理的场景都可以使用Spring Task …

贪吃蛇大作战【纯c语言】

如果有看到不懂的地方或者对c语言某些知识忘了的话,可以找我之前的文章哦!!! 个人主页:小八哥向前冲~-CSDN博客 所属专栏:c语言_小八哥向前冲~的博客-CSDN博客 贪吃蛇游戏演示: 贪吃蛇游戏动画演…

国产3D自研技术如何突围?眸瑞科技给3D建设、管理带来全新模式

眸瑞科技是全球领先的数字孪生引擎技术及服务提供商,它专注于让一切3D模型在全网多端轻量化处理与展示,为行业数字化转型升级与数字孪生应用提供成套的国产自研3D可视化技术、产品与服务。 引言 眸瑞科技是全球领先的数字孪生引擎技术及服务提供商&…

Zynq 7000 系列中的Interconnect(互联)简介

PS(处理器子系统)内部的互联结构包含了多个交换机,用于通过AXI点对点通道连接系统资源。这些通道负责在主机和从机客户端之间进行地址、数据和响应事务通信。该互联结构负责管理多个待处理的事务,并且为Arm CPU设计了低延迟路径&a…

Spark 基础

/* Why Spark一、MapReduce编程模型的局限性1、繁杂:只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码2、处理效率低:2.1、Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据2.2、任务调度与启动开销大3、…

Unity对应的c#版本

本文主要是记录一下unity已经开始兼容c#的版本和.net版本,以便更好的利用c#的特性。 c#和.net对应情况 微软已经将.net开发到.net 9了,但是unity的迭代速度远没有c#迭代速度快,已知unity最新的LTS版本unity2023已经兼容了c#9 可以在unity手册…

汽车底盘域的学习笔记

前言:底盘域分为传统车型底盘域和新能源车型底盘域(新能源系统又可以分为纯电和混动车型,有时间可以再研究一下) 1:传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

中电金信:向“新”而行——探索融合架构的项目管理在保险行业的应用

近年来,险企在政策推动、市场牵引、自身发展、新技术应用日趋成熟等内外部因素的驱动下,积极投身到数字化转型的浪潮中。在拜访各类保险客户和合作项目的过程中,我们发现不少险企在数字化转型中或多或少都面临着战略如何落地、技术如何承接和…

Java 基础常见面试题整理

目录 1、java的基本数据类型有哪些?2、java为什么要有包装类型?3、String a "123" 和 String a new String("123") 区别?4、String、StringBuilder和StringBuffer的区别?5、如何理解面向对象和面向过程&…

第72天:漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

案例一:某 APP-Web 扫描-常规&联动-Burp&Awvs&Xray Acunetix 一款商业的 Web 漏洞扫描程序,它可以检查 Web 应用程序中的漏洞,如 SQL 注入、跨站脚本攻击、身份验证页上的弱口令长度等。它拥有一个操作方便的图形用户界 面&#…

C++系列-输入输出

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” C输入和输出 我们都知道C语言的输出是用printf函数来实现的&#xff0c;那么C呢&#xff0c;它的实现逻辑是什么呢&#xff0c;让我们一起来看一下&#xff0c; #include<i…