C语言经典例73-反向输出一个链表

C语言实现单链表反转(图文) C语言实现单链表反转(图文) 据说是一道微软的面试题改编 挺有名的,据说很多人面试时 被要求当场纸写程序基本上都没答出来或者没答完整 本着他人故事不要成为我的事故的原则 ,尝试解一解 把思路分享一下( ̄▽ ̄)" 阅读详情

1 题目

反向输出一个链表,链表结构为:

typedef int ElementType;
typedef struct node {
    ElementType data;
    struct node *Next;
} *List;

2 分析

2.1 方法1-原地逆置

原地逆置链表的思路是将原链表的头节点和其余节点分成两个部分,然后将其余节点逐个取下节点进行头插法插入到原链表的头结点前面,这样就实现了链表原地逆置,且空间复杂度为 O ( 1 ) O(1) O(1)。

List reverse(List L)
{
    List prep;
	List p;
	List q;
    p = L->Next;
    q = p->Next;
    p->Next = NULL;
    while (q) {
        prep = p;
        p = q;
        q= q->Next;
        p->Next = prep;
    }
    L->Next = p;
    return L;
}

2.2 方法2-递归

上面的一种情况是强制改变链表原有顺序,那么也可以不改变链表的顺序,只逆序输出,那么可以使用递归,采用栈的思想,当链表的下一节点不为空NULL时进行递归,当链表的下一节点为NULL时返回递归输出节点数据,如下:

void reverse_2(List L) {
	if (L->Next != NULL) {
		reverse_2(L->Next);
	}
	printf("%d ", L->data);
}

调用方法为:

	reverse_2(L->Next);

3 实现

3.1 实现1-原地逆置

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

typedef int ElementType;
typedef struct node {
    ElementType data;
    struct node *Next;
} *List;

// 创建链表
List CreateList(void) {
    List L = (List)malloc(sizeof(struct node));
    L->data = 0;
    L->Next = NULL;
    return L;
}

// 初始化链表节点数据
void InitList(List L) {
    srand((unsigned)time(NULL)); // 随机数种子
    for (int i = 0; i < 10; i++) {
        List p = (List)malloc(sizeof(struct node));
        p->data = rand() % 100; // 节点数据采用随机数,随机数范围为0~99
        p->Next = L->Next;
        L->Next = p;
    }
}

// 打印链表
void PrtList(List L) {
    List p = L->Next;
    while (p) {
        printf("%d ", p->data);
        p = p->Next;
    }
    printf("\n");
}

// 逆置链表 
List reverse(List L)
{
    List prep;
	List p;
	List q;
    p = L->Next;
    q = p->Next;
    p->Next = NULL;
    while (q) {
        prep = p;
        p = q;
        q= q->Next;
        p->Next = prep;
    }
    L->Next = p;
    return L;
}

int main(void) {
    List L = CreateList(); // 创建链表
    InitList(L); // 初始化链表数据
	printf("原链表为:");
    PrtList(L);
	reverse(L); // 逆置链表
	printf("逆置后为:");
    PrtList(L);
    return 0;
}

3.2 实现2-递归

见2.2 方法2-递归中的程序段。

4 运行结果

原链表为:50 6 12 12 55 60 57 47 85 29
逆置后为:29 85 47 57 60 55 12 12 6 50
经典C语言程序100例之七三 【程序73】 题目:反向输出一个链表。    程序源代码: /reverse output a list/ #include “stdlib.h” #include “stdio.h” struct list { int data;  struct list *next; }; typedef struct list node; typedef node *link; void main() { link ptr,head,tail;   int num,i;  tail=(link)malloc(size 阅读详情

相关推荐

全本地AI代理实战:零数据外泄的本地化Agent工作流搭建

全本地AI代理是一种将大语言模型推理、长期记忆与工具调用完全运行于用户本地设备的智能体架构,其核心原理在于通过进程隔离与标准化协议实现模型层、记忆层和工具层的解耦协同。相比依赖云端API的传统方案,它在数据主权、响应确定性与环境复现性上具备不可替代的技术价值。典型应用场景包括法务合规文档处理、离线工业现场辅助决策、以及高敏感度企业知识管理。本文聚焦Qwen2+Ollama+SurrealDB+Agno技术栈,详解如何构建可落地的全本地AI代理系统,覆盖从硬件适配、向量记忆建模到多模态插件协同的完整链路。

weixin_34194964的博客 650

C语言经典100例(73)反向输出一个链表

【代码】C语言经典100例(73)反向输出一个链表。

jlfcc的博客 186

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 855

反向输出链表

/* 反向输出链表: 1.不改变链表结构:递归输出 2.改变链表结构:反转链表 */ #include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; struct LNode * next; } LNode,*LinkList; LinkList initList( int n ); void printList( LinkList...

一只小白的博客 1438

matlab tolx,Nelder-Mead算法matlab

Nelder-Mead算法适合变量数不是很多的方程求极值.原理:Nelder-Mead法是利用多面体来逐步逼近最佳点x*.设函数变量为n维,则在n维空间里多面体有(n+1)个顶点.设x1,x2,...,xn+1为多面体的顶点,且满足:f(x1)<=f(x2)<=...<=f(xn+1)Nelder-Mead法试着将多面体中最差的顶点xn+1(也就是函数的最大点)以新的最佳点替代,...

weixin_36485298的博客 1480

保姆级避坑指南:在Ubuntu 22.04上用ROS2 Humble搞定TurtleBot3的SLAM与导航(附5个常见报错解决方案)

本文提供了一份详细的Ubuntu 22.04上使用ROS2 Humble和TurtleBot3进行SLAM建图与导航的避坑指南,涵盖Gazebo启动失败、场景加载问题、环境变量设置、GLIBCXX版本冲突及Nav2参数配置等5个常见报错的解决方案,帮助开发者高效完成机器人导航项目。

weixin_29062823的博客 285

链表的逆向输出(多种方法实现)

链表的逆向输出 方法一:定义新数组 定义新的数组存放链表的值,将数组逆置后输出。这种方法很简单,但是浪费空间,相较而言不支持使用。 核心代码: void printreverse(Elensn* head) { Elensn *p; int among,a[N],i,j; for(p=head,i=0;p!=NULL;p=p-&amp;gt;next,i++) { a[i]=p-&amp;gt;data;//将链...

jiangwudu的博客 4065

2026年ComfyUI一键部署指南:秋叶整合包安装与API批量任务实战

节点式工作流是AI图像生成领域实现高度定制化和流程自动化的核心技术范式。其原理在于将图像生成的各个步骤(如提示词编码、模型加载、采样解码等)模块化为可连接、可配置的独立节点,用户通过可视化连线构建专属生成管线。这种架构的技术价值在于突破了固定界面的限制,提供了极致的灵活性与可重复性,尤其适合复杂工作流编排和批量生产任务。在应用场景上,它广泛应用于需要精细控制生成过程的研究、定制化内容创作以及自动化图像生成流水线。本文聚焦于ComfyUI这一代表性工具,详细解析如何通过秋叶整合包实现快速本地部署,并深入演示其

weixin_29056781的博客 540

链表打印(链表反转输出)

1、题目描述: 输入一个链表的头节点,从尾到头反过来打印每个节点的值,链表定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; } 2、测试用例 功能测试(输入的链表有多个节点;输入的链表只有一个节点) 特殊输入测试(输入的链表头结点指针为NULL) 3、解答思路 思路:遍历链表。但是遍历的顺序是从头到尾,可输出的顺序却是从尾到头。也就是说,第一个遍历的节点最后一个输出,而最后一个遍历的节点第一个输出。这个也可以看成栈,用栈来实现。每经过一个

shark_93的博客 1845

企业碳排放计算方法与实践:从年度总量到月度分配的完整流程

本文系统介绍了企业碳排放计算的全流程方法,包括数据预处理、能源活动与产品生产碳排放计算、年度汇总及月度分配优化。通过ARIMA模型预测补充缺失数据,采用二次规划算法实现基于用电量模式的月度碳排放分配,确保计算结果的准确性与合理性。该方法为企业碳排放管理提供了科学工具,有助于精准监控排放、制定减排策略并满足合规要求。实施中需注重数据质量控制和排放因子选择,并根据企业特点调整参数。该流程适用于制造业企业,为实现碳中和目标提供可靠的数据基础和管理支持。

applehunqiu的博客 1572

【WRF-Urban】URBPARM_LCZ.TBL 查找表解释及内容

URBPARM_LCZ.TBL 查找表解释及内容

WW、forever的博客 1754

菜鸟教程-C语言经典100示例(后50)

注:接上篇(菜鸟教程-C语言经典100示例(前50))51,学习使用按位与 &amp;。52,学习使用按位或 |。53,学习使用按位异或 ^。54,取一个整数a从右端开始的4~7位。55,学习使用按位取反~。56,画图,学用circle画圆形。57,画图,学用line画直线(在TC中实现)。58,学用rectangle画方形。(在TC中实现)。59,画图,综合例子。(在TC中实现)。60,画图,综...

zlhcsm的博客 7万+

couldn‘t upgrade db schema: insert into ACT_GE_PROPERTY values (‘common.sche[已解决]

启动整合了flowable的项目,初始化时报错。flowable没有自动建表, 原因 测试数据库版本是MySQL5.7。经过查询和尝试,原因是:在这个数据库里面,已经有一个数据库里面有activiti的这些表了,它检索的时候全库检索查到它了,所以flowable不去建表了,但是我们指定的这个schema里卖弄还是空的,所以它报了找不到表。解决方法:mysql的链接上加上参数如下,让本schema成为默认的schema。...

JavaPub 6005

经典C语言代码——part 19(链表)

题目:反向输出一个链表。题目:创建一个链表。题目:连接两个链表。

2303_81838541的博客 1105

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

经典c语言程序100例(71-80)

题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数。题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只。一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,题目:编写input()和output()函数输入,输出5个学生的数据记录。题目:找到年龄最大的人,并输出。1/1+1/3+...+1/n(利用指针函数)题目:放松一下,算一道简单的题目。题目:反向输出一个链表。题目:创建一个链表。

qq_41237850的博客 1029

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

经典C语言编程100例——题目+答案代码(71-80)

【程序 71】 题目:编写 input()和 output()函数输入,输出 5 个学生的数据记录。 1.程序分析: 2.程序源代码: #define N 5 struct student { char num[6]; char name[8]; int score[4]; } stu[N]; input(stu) struct student stu[]; { int i,j; for(i=0;...

bingocoder的博客 2617

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C语言经典一百例

经典C语言程序设计100例 1.数字排列    2.奖金分配问题    3.已知条件求解整数    4.输入日期判断第几天 5.输入整数进行排序    6.用*号显示字母C的图案  7.显示特殊图案    8.打印九九口诀 9.输出国际象棋棋盘    10.打印楼梯并按条件打印笑脸   11.经典兔子问题   12.判断素数 13.水仙花数问题   14.正整数分解质因数   15.学习成

xngjing的博客 1万+

C语言练习示例73:向输出一个链表

题目:反向输出一个链表。

新程序圆 1187

python链表逆序实例_Python练习实例73 | 反向输出一个链表

昨天,我们了解了一下什么是链表以及如何使用Python生成一个链表,今天我们来看下如何使用Python反向输出一个链表。小黄人.jpg反向输出,我们可以想到一个叫做reverse ()的函数方法,我们使用这个方法就可以非常方面的将正向的链表当中的元素,进行反向输出,具体如下图所示:# 反向输出一个链表if __name__ == '__main__': # 定义一个程序入口list_1 = [] ...

weixin_39598796的博客 341

C语言必会100题(15)。输出5个学生的数据记录/创建一个链表/反向输出一个链表/连接两个链表/放松一下

特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬) 题目来源:https://fishc.com.cn 注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。 71,输出5个学生的数据记录 1.题目:编写input()和output()函数输入,输出5个学生的数据记录。 2.要求:使用数组和结构体进行编写 3.程序源代码: #include <stdio.h> #define N 5 void input()

林炫的博客 849

C语言学习-菜鸟教程C经典100例-练习73

摘要:本文展示了如何用C语言实现链表反向输出功能。代码定义了一个链表结构体LNode,包含数据域和指针域。通过CreateList函数创建链表,接收用户输入的n个元素值。print函数遍历链表并顺序输出元素值。虽然题目要求反向输出,但当前代码实现的是顺序输出,需要进一步修改才能实现反向输出功能。

2301_77670476的博客 35

【C语言基础案例目录】经典C语言程序设计100例目录(附100例题目)

《C语言基础案例目录》精选100个经典程序设计案例,分为10个部分(每部分10例),涵盖数字组合、奖金计算、完全平方数等基础算法。案例由浅入深,包含素数判断、水仙花数、斐波那契数列等数学问题,以及递归、绘图、位运算等进阶内容。每个案例提供题目描述和源码解析,适合C语言学习者系统练习编程思维和实战能力。从基础控制结构到复杂算法实现,全面培养程序设计能力。

yuhuasheng1997的博客 1512

【C语言基础案例】经典C语言程序设计100例附源码解析(71-80例)

本文介绍了C语言程序设计71-80例的部分源码及解析,涵盖多个核心知识点。主要内容包括:结构体应用的学生信息管理系统(例71)、链表创建与反向输出(例72-73)、链表连接操作(例74)、逻辑推理题(例75)以及函数指针应用(例76)。示例程序展示了C语言中结构体、链表、指针、动态内存分配等关键技术的实际应用,帮助读者深入理解这些基础概念并提升编程能力。每个案例都包含完整的源代码和核心知识点分析,适合C语言学习者参考实践。

yuhuasheng1997的博客 548

经典C语言程序设计100例

                                                                                     经典C语言程序设计100例 1.数字排列    2.奖金分配问题    3.已知条件求解整数    4.输入日期判断第几天 5.输入整数进行排序    6.用*号显示字母C的图案  7.显示特殊图案    8.打印九九口诀 ...

qq_42671132的博客 1945

C语言经典100示例——学习记录(下)

目录 61,打印出杨辉三角形 (1)直角三角形的形式 (2)等腰输出杨辉三角形 67,数组中最大的与第1个元素交换,最小的与最后一个交换 68,n个整数,各数顺序后移m位,最后m个数变成最前面的m个 法1:公式法 法2:用数组来解 法3:链表法(掌握不好) 70,求一个字符串的长度 72,创建一个链表。 73,反向输出一个链表——头插法 74,连接两个链表 78,找到年龄最大的人,并输出(结构体) 79,字符串排序。 80,猴子分桃 又一问题 81,809*??=800*..

joker412的博客 1647

经典c程序100例==71--80

【程序71】题目:编写input()和output()函数输入,输出5个学生的数据记录。1.程序分析:2.程序源代码:#define N 5struct student{ char num[6]; char name[8]; int score[4];} stu[N];input(stu)struct student stu[];{ int i,j; for(i=0;i { printf("/n

徒步旅行... 797
上一篇: C语言经典例71-编写函数输出结构体数据
下一篇: C语言经典例74-连接两个链表
syzdev
博客等级 码龄9年 852粉丝 149原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值