当前位置: 首页 > news >正文

重排链表(C语言)



 

题目:

 示例:


 

 思路:

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

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

图示:


 

代码:

//栈
#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.lryc.cn/news/137410.html

相关文章:

  • el-table动态合并单元格
  • html元素
  • push github
  • iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像
  • 动态规划入门之01背包变形嗑药
  • 数据结构——栈和队列OJ题
  • 同态排序算法
  • “深入探索JVM内部机制:解析Java虚拟机的工作原理“
  • 为应用程序接入阿里云CDN优化网站访问速度
  • 索引设计规范
  • Appium 2安装与使用java对Android进行自动化测试
  • 小程序运营方式有哪些?如何构建小程序运营框架?
  • 【golang】for语句和switch语句
  • 三、数据库索引
  • 长时间带什么耳机最舒服,分享长时间佩戴舒服的耳机推荐
  • Yolov8小目标检测(1)
  • GPS定位漂移问题分析
  • 前端简介(HTML+CSS+JS)
  • List与String数组互转
  • MySQL中的数据类型
  • python多任务
  • c语言 - inline关键字(内联函数)
  • 如何在Ubuntu 18.04上安装PHP 7.4并搭建本地开发环境
  • 狭义相对论
  • 仓库使用综合练习
  • 如何在前端实现WebSocket发送和接收TCP消息(多线程模式)
  • VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库
  • 怎样不引入图片实现前端css实现x关闭按钮
  • SpringBoot实现文件下载的多种方式
  • uniapp简单版语音播放