重排链表(C语言)

news2024/11/15 23:30:33


 

题目:

 示例:


 

 思路:

这题我们将使用栈解决这个问题,利用栈先进后出的特点,从链表的中间位置进行入栈,寻找链表的中间位置参考:删除链表的中间节点,之后从头开始进行连接。

本题使用的栈源代码在此处:栈和队列的实现

图示:


 

代码:

//栈
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef struct ListNode* DataType;
typedef struct Stack
{
	DataType* data;
	int top;
	int capacity;
}Stack;
 
void Init(Stack *st);
void Push(Stack* st, DataType x);
void Pop(Stack* st);
DataType GetTop(Stack* st);
bool Empty(Stack* st);

void Init(Stack* st)
{
	assert(st);
 
	st->data = NULL;
	st->top = 0;
	st->capacity = 0;
}
 
void Push(Stack* st, DataType x)
{
	assert(st);
 
	if (st->capacity == st->top)
	{
		int newcapacity = (st->capacity == 0) ? 4 : st->capacity * 2;
 
		DataType* temp = (DataType*)realloc(st->data, sizeof(DataType) * newcapacity);
		if (temp == NULL)
		{
			perror("realloc fail");
			exit(-1);
		}
 
		st->data = temp;
		st->capacity = newcapacity;
	}
 
	st->data[st->top++] = x;
}
 
void Pop(Stack* st)
{
	assert(st);
	assert(st->top > 0);
 
	st->top--;
}
 
DataType GetTop(Stack* st)
{
	assert(st);
	assert(st->top > 0);
 
	return st->data[st->top - 1];
}
 
bool Empty(Stack* st)
{
	assert(st);
 
	return (st->top == 0);
}
 
//寻找链表的中间位置
struct ListNode* findMiddle(struct ListNode* head)
{
    if(head == NULL || head->next == NULL)
        return NULL;
 
    struct ListNode* slow = head;
    struct ListNode* fast = head;
 
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
 
    return slow;
}

//于此处开始正式解题
void reorderList(struct ListNode* head)
{
    if(head == NULL || head->next == NULL)
        return head;

    Stack list;
    Init(&list);

    struct ListNode* middle = findMiddle(head);
    while(middle)
    {
        Push(&list,middle);
        middle = middle->next;
    }
    
    struct ListNode* cur = head;
    struct ListNode* next = NULL;

    int flag = 1;
    while(!Empty(&list))
    {
       
        if(flag == 1)
        {
            next = cur->next;

            cur->next = GetTop(&list);
            Pop(&list);

            flag = 0;
        }
        else
        {
            cur->next = next;
            flag = 1;
        }
        cur = cur->next;
       
    }
    cur->next = NULL;

    return head;
}

 

个人主页:Lei宝啊

愿所有美好如期而遇

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

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

相关文章

SpringMVC拦截器快速入门和入门详解

1、SpringMVC如何快速实现Interceptor 2、第二步配置拦截器在SpringMVC.xml中进行配置 3、第三步测试拦截器效果&#xff0c;如果没有拦截器我可以直接访问到&#xff0c;如果有我不一定能访问到&#xff1a; 3.1 4、这里SpringMVC的配置文件我已经配好了 5、弄一个方法和虚…

记录一个诡异的bug

将对接oa跳转到会议转写的项目oa/meetingtranslate项目发布到天宫&#xff0c;结果跳转到successPage后报错 这一看就是successPage接口名没对上啊&#xff0c;查了一下代码&#xff0c;没问题啊。 小心起见&#xff0c;我就把successPage的方法请求方式从Post改为Get和POST都…

2023年京东婴童纸尿裤行业数据分析(京东数据运营)

当前&#xff0c;面对出生率下降、消费疲软等各种大环境不确定性&#xff0c;不仅是线下母婴店深陷于“生意难”的境地&#xff0c;线上消费同样受影响颇深&#xff0c;婴童纸尿裤类目便是如此。下面结合鲸参谋平台的数据&#xff0c;从行业大盘、品牌端等方面来看一下婴童纸尿…

博客摘录「 spring源码之scope」2023年8月2日

原型模式是每次调用都直接生成&#xff0c;bean是不入缓存的。

微服务中间件--多级缓存

多级缓存 多级缓存a.JVM进程缓存1) Caffeine2) 案例 b.Lua语法1) 变量和循环2) 条件控制、函数 c.多级缓存1) 安装OpenResty2) 请求参数处理3) 查询Tomcat4) Redis缓存预热5) 查询Redis缓存6) Nginx本地缓存 d.缓存同步1) 数据同步策略2) 安装Canal2.a) 开启MySQL主从2.b) 安装…

微服务 Nacos配置热部署

在nacos中添加配置文件 在配置列表中添加配置&#xff0c; 注意&#xff1a;项目的核心配置&#xff0c;需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 从微服务拉取配置 微服务要拉取nacos中管理的配置&#xff0c;并且与…

python多任务

​ 一、多任务 1.1 概念 多任务就是指&#xff1a;同一时间能执行多个任务。比方我们的电脑能一边QQ聊天&#xff0c;一边写论文&#xff0c;还能听歌。 1.2 多任务的优势&#xff1a; 多任务的最大好处是 充分利用CPU资源&#xff0c;提高程序的执行效率。 1.3 多任务的两种表…

SAP 创建维护视图

创建维护视图之前有几个坑&#xff0c;需要小心别踩到 1.不能直接创建维护视图&#xff0c;最好先创建表&#xff0c;然后点击实用程序——>表维护生成器 然后选择权限和函数组&#xff08;函数组选择自己本身&#xff09; 这里的第一个坑就是如果没有选择自己本身&#xf…

el-tree 默认选中第一个数据

/*** 初始化左侧树* param {*} GetDataLists*/SetTreeDatas() {let _this this;_this.$API.SysDictDataGetLeftdata().then((res) > {_this.treeData res.data.data; //给树赋值this.$nextTick(() > {this.$refs.treeList &&this.$refs.treeList.setCurrentKey…

集简云本周新增/更新:新增2大功能,集成2款应用,更新4款应用,新增近20个动作

本周更新概要 新增功能 新增功能&#xff1a;Claude2 新增功能&#xff1a;语聚AI对话助手对话背景设定 应用新增 新增应用&#xff1a;领星ERP 新增应用&#xff1a;slack(自建) 应用更新 更新应用&#xff1a;企业微信(代开发) 更新应用&#xff1a;阿里云效2020(新版…

Java“牵手”快手商品列表数据,关键词搜索快手商品数据接口,快手API申请指南

快手商城是一个网上批发购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取快手商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问快手商城的网页来获取商品详情信息。以下是两种常用方法的介绍…

高达照进现实?可驾驶变形机器人问世,4 亿日元即刻“变身”

根据报道&#xff0c; ARCHAX是一款引人注目的机器人&#xff0c;它在机器人模式下可以模仿人类的活动&#xff0c;拥有高达4.5米的身高。在车辆模式下&#xff0c;ARCHAX可以以10公里每小时的速度行驶&#xff0c;重量约为3.5吨。 这款机器人由电池驱动&#xff0c;驾驶舱位于…

飞天使-k8s基础组件分析-持久化存储

文章目录 emptyDirhostpathpv和pvc介绍nfs作为静态pv案例nfs作为动态pv案例使用本地文件夹作为pv改变默认存储类及回收策略参考文档 emptyDir 重启文件还有&#xff0c;但是如果杀了进程&#xff0c;则会丢失文件 创建pod # kubectl apply –f redis.yaml校验pod是否处于运行&…

pyside6--核心版本的信号与槽的小示例

pyside6--核心版本的信号与槽的小示例 一、自定义的信号与槽的示例 1.1界面函数 还是使用上次的常用功能组件的界面&#xff0c;只是这次我 只使用按钮以及标签进行测试 1.2主函数核心代码 # 导入 t1gui_ui _ui from t1gui_ui import Ui_Form from PySide6.QtWidgets import …

Java8 Stream流 flatMap使用

参考链接 import cn.hutool.core.collection.ListUtil; import lombok.AllArgsConstructor; import lombok.Data;import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors;public class FlatMapLearn {DataAllArgsConstructorpublic static c…

iOS开发之查看静态库(.a/.framework)中包含的.o文件和函数符号(ar,nm命令)

.a/.framework其实是把编译生成的.o文件&#xff0c;打包成一个.a/.framework文件。a的意思是archive/归档的意思。 查看静态库.a文件包含的内容用下面的命令解压&#xff1a; ar x xxx.a 用ar命令打包静态库&#xff1a; 参数r是将后面的*.o或者*.a文件添加到目标文件中 参数…

赴日工作SaaS/PaaS/IaaS到底有什么区别?

许多开始关注赴日IT的技术流的小伙伴&#xff0c;已经开始关注外网上的一些案件需求或者招聘需求了。那么你会发现很多需求当中都写着开发SaaS/PaaS/IaaS这些词汇&#xff0c;而且出现频率很高&#xff0c;那他们究竟代表什么意思呢&#xff1f; 先来说SaaS&#xff0c;Softwa…

此股必成大器!【海螺水泥】坚定看好-神奇指标网

8.22此股必成大器&#xff01;【海螺水泥】坚定看好 操盘胜率极高的神奇指标系统已经给出了答案&#xff0c;苦等几日今天终于发出多头信号。 从7月底开始&#xff0c;神奇指标叠线重合并且股价站上叠线上&#xff0c;第二个交易日直接跳空高开&#xff0c;预示多头行情的开始。…

年薪100W的PM如何制定项目进度计划?

大家好&#xff0c;我是老原。 做了这么久的项目经理&#xff0c;也带过很多项目&#xff0c;无论是他人估算还是自己预测&#xff0c;都很少有按期完成的项目&#xff0c;要么提前&#xff0c;要么延后&#xff0c;按期完成的无非是熟门熟路十拿九稳&#xff0c;亦或是运气使…

KusionStack使用文档

下载安装 1. 安装 Kusionup 如果想自定义默认安装版本&#xff0c;可以运行下述命令&#xff08;将最后的 openlatest 替换为你想要默认安装的版本号就就行&#xff09;&#xff1a; curl -s "http://kusion-public.oss-cn-hzfinance.aliyuncs.com/cli/kusionup/script…