单链表-交叉排列

news2024/12/16 15:23:12

单链表重新排列

题目:

给定一个单链表 L(a1, a2, a3, …, an),将其重新排列为 (a1, an, a2, an-1, …)

思路:

  1. 首先找到链表的中点,将链表分为前后两部分。
  2. 然后反转后半部分链表。
  3. 最后交替合并前半部分和反转后的后半部分链表。

整体代码:

// 定义链表节点结构体
typedef struct LNode {
    int data; // 节点存储的数据
    struct LNode *next; // 指向下一个节点的指针
} LNode, *Linklist;

// 函数声明,用于反转链表
Linklist divrev(Linklist &L) {
    LNode *p = L, *q = L;
    // 寻找中点,p 和 q 初始指向头节点,q 每次移动两步,p 每次移动一步
    while (q != NULL && q->next != NULL) {
        p = p->next;
        q = q->next->next;
    }

    // 创建新节点,用于反转后链表的头节点
    LNode *L1 = new LNode;
    L1->next = p->next;
    p->next = NULL; // 断开前半部分和后半部分的连接

    // 反转后半部分链表
    LNode *p1 = L1->next, *r;
    L1->next = NULL; // 初始化新链表头节点的 next 指针
    while (p1 != NULL) {
        r = p1->next; // 保存下一个节点
        p1->next = L1->next; // 反转当前节点的指针
        L1->next = p1; // 将当前节点加入到新链表中
        p1 = r; // 移动到下一个节点
    }
    return L1; // 返回新链表的头节点
}

// 函数声明,用于合并两个链表
void merge(Linklist &L) {
    LNode *r, *s;
    // 调用 divrev 函数反转链表 L
    LNode *L1 = divrev(L);
    LNode *p = L->next, *q = L1->next;
    L1->next = NULL; // 重置 L1 的 next 指针

    // 交替合并两个链表
    while (q != NULL) {
        r = p->next;
        s = q->next;
        p->next = q; // 将 q 节点插入到 p 节点之后
        q->next = r; // 调整 r 节点的前驱指针
        p = r; // 移动 p 到下一个待插入位置
        q = s; // 移动 q 到下一个待合并节点
    }
}

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

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

相关文章

C语言基础14(动态内存控制后续)

文章目录 野指针、空指针、空悬指针野指针空指针空悬指针 void与void*的区别内存操作常用内存操作函数内存填充内存拷贝内存比较内存查找 野指针、空指针、空悬指针 野指针 定义:指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)&a…

CSS在线格式化 - 加菲工具

CSS在线格式化 打开网站 加菲工具 选择“CSS在线格式化” 或者直接访问 https://www.orcc.online/tools/css 输入CSS代码,点击左上角的“格式化”按钮 得到格式化后的结果

分布式事物XA、BASE、TCC、SAGA、AT

分布式事务——Seata 一、Seata的架构: 1、什么是Seata: 它是一款分布式事务解决方案。官网查看:Seata 2.执行过程 在分布式事务中,会有一个入口方法去调用各个微服务,每一个微服务都有一个分支事务,因…

Serdes技术与Xilinx GT概览

目录 一、前言 二、Serdes技术 2.1 芯片间信号传输 2.2 Serdes技术 三、 Xilinx GT 3.1 7系列器件GT 3.2 Ultrascale GT 3.3 Ultrascale GT 四、参考资料 一、前言 对于芯片间高速信号传输技术,不得不提serdes以及在Xilinx在此基础上的高速收发器GT系列&…

HarmonyOS Next 元服务新建到上架全流程

HarmonyOS Next 元服务新建到上架全流程 接上篇 这篇文章的主要目的是介绍元服务从新建到上家的完整流程 在AGC平台上新建一个项目 链接 一个项目可以多个应用 AGC新建一个元服务应用 新建一个本地元服务项目 如果成功在AGC平台上新建过元服务,那么这里会自动显…

【Spark】Spark的两种核心Shuffle工作原理详解

如果觉得这篇文章对您有帮助,别忘了点赞、分享或关注哦!您的一点小小支持,不仅能帮助更多人找到有价值的内容,还能鼓励我持续分享更多精彩的技术文章。感谢您的支持,让我们一起在技术的世界中不断进步! Sp…

【CSS in Depth 2 精译_079】第 13 章:渐变、阴影与混合模式概述 + 13.1:CSS 渐变效果(一)——使用多个颜色节点

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(一) ✔️13.1.2 颜色插值13.1.3 径向渐变13.1.4 锥形渐变 文…

Linux 中的 mkdir 命令:深入解析

在 Linux 系统中,mkdir 命令用于创建目录。它是文件系统管理中最基础的命令之一,广泛应用于日常操作和系统管理中。本文将深入探讨 mkdir 命令的功能、使用场景、高级技巧,并结合 GNU Coreutils 的源码进行详细分析。 1. mkdir 命令的基本用法…

mp4影像和m4a音频无损合成视频方法

第一步:复制高清视频地址 url 第二步:打开网址粘贴复制的视频url视频下载 第三步:下载-影像.mp4和-音频.m4a 第四步:合并视频; 使用ffmpeg进行无损合成(如果没有安装ffmpeg请自行下载安装下载 FFmpeg (p2hp.com)&…

Leonardo.Ai丨一键生成图片(AI绘图)

随着人工智能技术的迅速发展,AI在各个领域的应用越来越广泛,特别是在图像生成方面。AI艺术创作的崛起,不仅让艺术创作变得更加便捷和创新,也为设计师、艺术家及普通用户提供了全新的工具。Leonardo.Ai作为一款基于人工智能的图像生成工具,通过简洁的操作和强大的功能,成功…

简单的Java小项目

学生选课系统 在控制台输入输出信息&#xff1a; 在eclipse上面的超级简单文件结构&#xff1a; Main.java package experiment_4;import java.util.*; import java.io.*;public class Main {public static List<Course> courseList new ArrayList<>();publi…

Android实现RecyclerView边缘渐变效果

Android实现RecyclerView边缘渐变效果 1.前言&#xff1a; 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果&#xff0c;可以使RecyclerView的边缘在滚动时逐渐淡出或淡入&#xff0c;以提升用户体验。 2.Recyclerview属性&#xff1a; 2.1、requiresFading…

Avalonia的Ribbon

将以前Avalonia项目中的Ribbon单独隔离&#xff0c;提交到了github,方便大家查看修改。 Ribbon做成了组件&#xff0c;但是想要界面效果&#xff0c;还得结合窗体功能开发。 项目地址&#xff1a; jinyuttt/AvaloniaRibbonUI: AvaloniaRibbon component

Vue04

目录 一、学习目标 1.组件的三大组成部分&#xff08;结构/样式/逻辑&#xff09; 2.组件通信 3.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09; 4.进阶语法 二、scoped解决样式冲突 1.默认情况&#xff1a; 三、data必须是一个函数 1、data为什么要写…

C# 探险之旅:第十八节 - 元组(Tuple):神奇的背包与丢弃的艺术,还有变身大法!

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上C#的奇妙旅程。今天&#xff0c;我们要聊的是一个非常实用又有点懒散的旅行伴侣——元组&#xff08;Tuple&#xff09;。想象一下&#xff0c;你正准备来一场说走就走的旅行&#xff0c;但是不想带太多行李&#xff0c;只想简单…

SAP软件如何启用反记账功能

SAP软件和国内ERP软件不一样&#xff0c;它在录入会计凭证时是不可以录入负数的&#xff08;即红冲凭证&#xff09;&#xff0c;因此无法直接实现传统意义上的红字冲销。 比如&#xff0c;如下SAP正常和冲销业务产生会计凭证如下&#xff1a; 正常的业务凭证&#xff1a; 借…

若依-帝可得app后端

视频地址 https://www.bilibili.com/video/BV1pf421B71v?t=510.1 APP后端技术栈 架构解析 验证码功能 开发环境使用改的是固定的验证码 12345正式环境使用的是 阿里云的短信方案@Override public void sendSms(String mobile) {// String code = RandomUtil.randomNumbers(5);…

金融分析-Transformer模型(基础理论)

Transformer模型 1.基本原理 transformer的core是注意力机制&#xff0c;其本质就是编码器-解码器。他可以通过多个编码器进行编码&#xff0c;再把编码完的结果输出给解码器进行解码&#xff0c;然后得到最终的output。 1.1编码器 数据在编码器中会经过一个self-attention的…

JS-手写new

我们先再来理一理原型 Object1 {name:deng,age:18 } Object2 {name:ru,age:18 } const Person function(){} Person.prototype Object1; const p1 new Person(); console.log(p1.name); //deng Person.prototype null; console.log(p1.name); //deng上面给Person的构造函…

深圳国威HB1910数字IP程控交换机 generate.php 远程命令执行漏洞复现

0x01 产品描述: 深圳国威主营国威模拟、数字、IP 交换机、语音网关、IP 电话机及各种电话机。深圳国威电子有限公司HB1910是一款功能强大的网络通信设备,适用于各种企业通信需求。 0x02 漏洞描述: 深圳国威电子有限公司HB1910数字IP程控交换机generate.php存在远程命令执行…