单链表排序、逆序

C语言实现单链表的创建、增、删、改、查、逆序、冒泡排序 链表相关操作: //创建一个链表,并进行增删改查 定义结构体: typedef struct Node { int data; struct Node *next; }Linklist; 1.主函数相关调用语句 int main() { int num=0; Linklist * phead=NULL; puts("请输入需要创建的节点数"); scanf("%d",&num); create_list(&phead,num); //通过指针的指针进行头指针的改变 tra 阅读详情

   对单链表进行排序,我这里选择冒泡排序,选择对其关键字进行排序;而不选择交换结点。把链表逆序的话,基本思路就是使两结点之间的指向变反,也就是p1->p2变为p2->p1;把第一个结点的指针域设为NULL;最后使头结点指向尾结点。

源代码:

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
 int data;
 struct node *next;
}linklist;
linklist *head=NULL;
//head为头结点

linklist* CreateList() //尾插法建单链表
{
 int _data;
 linklist *pCurrent,*rear;  //rear为尾指针,pCurrent为当前指针
 head = (linklist*)malloc(sizeof(linklist));
 rear = head;
 scanf("%d",&_data);
 while (_data != -1)
 {
  pCurrent = (linklist*)malloc(sizeof(linklist));
  pCurrent->data = _data;
  rear->next = pCurrent;
  rear= pCurrent;
  scanf("%d",&_data);
 }
 rear->next = NULL;
 return head;
}

void ShowList(linklist *p)
{
 while (p)
 {
  printf("%d,",p->data);
  p = p->next;
 }
 printf("End/n");
}

void BubbleSortList(linklist *p)   //链表冒泡排序
{
 linklist *_temp = p->next;
 linklist *_node = p->next;
 int temp;
 for (;_temp->next;_temp = _temp->next)
 {
  for (_node = p->next;_node->next;_node = _node ->next)
  {
   if (_node->data > _node->next->data)
   {
    temp = _node->data;
    _node->data = _node->next->data;
    _node->next->data = temp;
   }
  }
 }
}

void ReverseList(linklist *p)  //逆转链表
{
    linklist *p1,*p2,*p3;
 int _data;
    p1 = p->next;
 if (!p1->next)
  return;
    p2 = p1->next;
 if (!p2->next)
 {
  _data = p1->data;
  p1->data = p2->data;
  p2->data = _data;
  return;
 }
    p3 = p2->next ;
    p1->next = NULL;
    while (p3->next)
    {
  p2->next = p1;
        p1 = p2;
        p2 = p3;
        p3 = p3->next;
    }
    p2->next = p1;
    p3->next = p2;
    p->next = p3;
}

int main(void)
{
 CreateList();
 ShowList(head->next);

 ReverseList(head);
 ShowList(head->next);

 BubbleSortList(head);
 ShowList(head->next);
 return 0;
}

单链表的输出,逆序,排序 ListNode节点的定义 template<class T> struct ListNode { T val; ListNode* next; ListNode(T val) { this->val = val; this->next = nullptr; } }; 链表的几个简单的题目 /*从文件中读取链表数据*/ template<cl... 阅读详情

相关推荐

单链表(二):如何实现单链表的排序、逆置(逆序)

1、单链表的排序 示例代码如下: #include using namespace std; ///单链表结构体:结点 typedef struct student { int data; //结点中的数据 struct student *next; //指向链表下一个结点的指针 }node; node *head; //头结点指针 int index; //链表长

成长Bar的博客专栏 1657

实现链表的逆序的三种方式

文章目录问题分析方法一:就地逆序方法二:递归法方法三:插入法 问题 给定一个带头节点的单链表,将其逆序。head->1->2->3->4->5->6->7变为 head->7->6->5->4->3->2->1。 分析 单链表与数组不同,单链表中每个节点的地址都存储在其前驱节点的指针域中,因此对链表中任何一个节...

Lud的博客 1万+

数据结构-就地逆置单链表,单链表插入排序,单链表选择排序,判断子序列,拆分并逆序单链表,归并并逆序单链表,

数据结构与算法

VAN 198

链表逆序

链表逆序的本质就是把没一个节点原本指向的下一个节点的next指针倒转过来,指向它的前置节点 让我们从链表头部开始,建立三个临时节点的引用,分别为p1,p2,p3。它们分别指向头节点、第二个节点、第三个节点。 实现链表逆序的完整步骤如下: 1.以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。 2.三个临时节点引用p1,p2,p3分别向后移动一格位置。...

xiaozhu0301的博客 3858

华为昇腾Atlas200DK. CANN模型推理——目标检测结果不对(无检测结果)的问题解决

目录前言问题描述问题排查1.后处理模块问题排查2.预处理模块问题排查3.模型问题排查4.算法bug问题排查5.AI板卡问题排查6.模型精度问题排查6.模型推理问题解决:模型输入数据与预处理不同后记 前言 上周我在华为昇腾Atlas200DK中部署nanodet和yolov5时,出现了目标检测结果不对(没有检测到任何物体),困扰了整整三天,最后找到原因并圆满解决,在这里记录一下debug过程。 以上测试均在python中完成。 问题描述 第一天上午,我首先将nanodet由pytorch的.pth模型转换为.

qq_41035283的博客 5604

PCA9698嵌入式C++驱动库:高性能I²C GPIO扩展方案

GPIO扩展是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心原理在于通过串行总线(如I²C)桥接主控与外设寄存器,实现逻辑引脚到物理IO的映射与状态同步。技术价值体现在低开销、高确定性与多设备可扩展性,广泛应用于工业控制、传感器节点和LED矩阵驱动等实时场景。本文聚焦PCA9698——一款支持24通道双向IO、中断输出与可编程驱动模式的I²C GPIO扩展芯片,结合其C++驱动库的影子寄存器机制、端口级原子操作及非阻塞同步设计,提供面向资源受限平台(如ATmega2560)的工程就绪方案。

weixin_35756637的博客 626

单链表逆序的几种方法

 最近做了几道leetcode,发现自己还是没有形成知识体系,因此决定把所学的做个积累。这篇文章主要讲的是单链表逆序的两种方法:头插法与递归。(目前只想到两种,持续更新) 带头结点的单链表 一、头插法  头插法,顾名思义就是从链表的头部插入。当我们要把该链表顺序逆序成head->4->3->2->1时(头结点不用),显然我们需要两个指针cur(指向要插入的结点),next(指向cur的下一个结点)。  在此,我用了一个辅助的头结点reverseHead便于操作,cur首先指向的是值为

Dlihctcefrep的博客 6350

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1008

C语言单链表的算法之逆序

C语言单链表的算法之逆序

tmk1234567890的博客 1788

freertos移植心得

1.freertos移植msp430 今天终于移植成功了freertos。现在写下这篇博文来整理这一路移植过程中遇到的问题和心得。 由于使用的是IAR FOR MSP430的IDE,博文只讨论在IAR下的移植。本文针对的是官方支持的平台架构下的移植,不使用官方提供的demo,得到的是一个纯洁版的系统。 1.下载源代码 在freertos的官网下载一份最新的源代码点击打开链接。 2.选择平

一条狗的博客 4173

单链表逆序操作学习

前言 将单链表逆序,方法有三种: 遍历链表,将每个节点的内容存入一个数组中,然后逆序输出数组,并重新构造一个链表 使用栈来逆序输出,原理与1相似,出栈的时候也需要重新构造一个新链表 直接将链表逆序然后输出 其中,前面2种方法原理相似,也比较好理解,但是这样会耗费额外的内存空间;第三种方法则不需要额外的内存空间,便可实现单链表的逆序。 本文主要记录对第三种方法的操作原理。 原理 第三种...

Luncles的博客 1778

【Kubernetes】Kubernetes 安全沙箱深度对比:gVisor vs Kata Containers

Kubernetes安全沙箱深度对比:gVisor和Kata Containers在架构、性能与安全性方面各有特点。gVisor通过用户态内核(Sentry)实现软件隔离,启动快(毫秒级)但CPU开销大(20-30%),适合Web服务等场景。Kata Containers采用轻量级虚拟机提供硬件级隔离,启动较慢(1-2秒)但兼容性更好,适合金融等高安全需求。测试显示gVisor在动态请求下性能下降33%,而Kata性能接近原生。建议根据场景选择:多租户/快速启动用gVisor,敏感数据/极致安全用Kata,

九师兄 178

单链表的逆序和排序合并(C++)

对于单链表,想要逆序就得将所有结点的指针方向反转,而排序合并则可以建立一个虚结点,再比较两链表的值并遍历,最后返回合并后的头结点。//反转的关键,定义头结点为当前结点,next结点和prev结点初始设置为空,让当前结点的指针指向前一个结点并向后遍历。【输入形式】输入表1的元素个数,表1的元素值(逆序),同表1,输入表2的数据。92 91 31 2 //表2的元素值(逆序)22 21 19 //表1的元素值(逆序)2、将建立的两个链表合并为一个新的有序的单链表;//返回反转后的头结点,即原来的尾结点。

2401_86562204的博客 513

Xilinx ISE系列教程(2):LED点灯工程、仿真、bit下载和mcs固化

bit流生成配置选项很多,支持生成bit/bin/ascii格式的bin文件,是否压缩,配置速度,配置管脚的上下拉,用户ID,数据加载速度,SPI总线宽度,是否支持Readback,程序加密等等。,在之后的文章,我们会以Xilinx Spartan-6系列FPGA XC6SLX16为例,不涉及FPGA开发知识,仅仅是工具的使用,介绍Xilinx ISE开发环境的使用教程和使用技巧。bit文件下载之后,可以看到LED按照我们设计的1s周期闪烁起来了,但是此时如果断电,重新上电程序就丢失了。...

whik1194的博客 2279

C++程序无法正常启动(报0xc000007b错误)问题的详细排查

本文详细介绍了应用程序启动时遇到0xC000007B错误的排查过程。问题源于32位程序与64位运行时库的不匹配,以及缺少依赖的运行时库。通过分析系统日志、使用Windbg和检查程序位数,最终确定问题在于32位程序误引用了64位系统目录下的库文件。

dvlinker的技术专栏 1万+

单链表逆序与排序

#include #include #include typedef struct data{ /*链表节点*/     int id;     struct data *next; }DATA; void list_init(DATA *data) /*链表初始化*/ {     data->id = 0;     data->next = NULL; }

leslie.M 1531

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

单链表的冒泡排序以及逆序(交换指针法)

一直苦于单链表进行排序操作,在博客上看到好多的链表排序都是以值交换为主,实在是很难受。自己有一个需求就是写一个单链表的冒泡排序和逆序。然后自己也写了值交换法的单链表冒泡排序和逆序,希望能对需要帮助的朋友产生一些启发,当然本人的水平有限,写的不好,请大家指导。 #include #include // 链表结构体 typedef struct _Node {     int da

ARRAYLI_博客 4341

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据结构——单链表查询、逆序、排序

4、插入排序(从未排序部分取出一个元素,插入到已排序部分的正确位置)

xgshxjhs_的博客 957

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

单链表逆序排序问题

Leetcode上刷到的三个单链表算法题 1.给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. //单链表结构 public class ListNode { int val; L...

qq_41296702的博客 557

单链表逆序算法

单链表逆序-----非递归 node * reverse(node *head) { node * cur,pnext,temp; cur=head; pnext=head-next; while(cur != NULL  ) { temp=pnext->

glorin的专栏 2570

单链表:找中间节点、找倒数第k节点、是否有环、逆序、排序(选择、冒泡、插入)

如何验证---需要建一个环:利用 "找倒数第 k 个节点" :这里找两个再把他们连起来形成环。分奇偶数个节点 当奇数:pf走到NULL 或 偶数:pf走到尾节点 时,ps刚好在中间。2、双指针(从头节点开始;如果从首节点开始的话,最后一个数找不到)1、同样可以用长度 len-k(不推荐)1、通过链表长度(简单,不推荐)2、快慢指针(推荐)

zjh200206的博客 165

c语言带头节点的单链表插入排序

直接插入排序的思想,就是先默认第一个元素是排序好的,在顺序表中,从后面往前依次进行比较,从而进行排序。但是在单链表中,从后面遍历的话,找结点的前驱非常困难。故从头进行遍历。 待排序链表(进行逆序排序) 将头节点与第一个元素保留,其后元素断开(头用curr指针) 用临时指针pre与r,指向头节点与第一元素 遍历curr所指链表,一个节点一个节点进行插入操作 第一次插入 ...

weixin_42281802的博客 2835

单链表逆序

#include #include typedef struct student {     int number;     char name[20];     int score;     struct student *next; }student;typedef struct list {     int a;     struct list *next;

滴答滴--依旧 857

C语言链表(2)单链表进阶操作——中间节点、倒数第k个、逆序、排序

本文介绍了链表操作的几种常见算法:1. 查找中间节点(快慢指针法)2. 查找倒数第k个节点(双指针法)3. 判断链表是否有环(快慢指针相遇法)4. 链表逆序(头插法)5. 链表排序(包括选择排序、冒泡排序和插入排序三种实现)。每种算法都提供了详细的思路说明和代码实现,重点讲解了快慢指针技巧在链表操作中的灵活应用,以及不同排序算法在链表结构中的实现特点。这些算法是链表操作的基础,对理解数据结构和算法设计具有重要意义。

xxy22241的博客 185
上一篇: 测测您的能力:微软程序员测试题(算法)
下一篇: 单循环链表的实现
EdgarSun
博客等级 码龄21年 2粉丝 7原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值