单链表的递归逆置

用递归方法逆置带头结点的单链表 /** *    实验题目: *        用递归方法逆置带头结点的单链表 *    实验目的: *        掌握单链表递归算法设计方法 *    实验内容: *        用递归方法逆置一个带头结点的单链表 */ #include <stdio.h> #include <malloc.h> typedef char ElemType; typedef s... 阅读详情
#include <stdio.h>
#include <stdlib.h>
#define M 20
struct num
{
    int a;
    struct num *next;
};
struct num *reverse(struct num *head)
{
    struct num *p;
    p = head;
    if (p->next == NULL)
    {
        return p;
    }
    else
    {
        reverse(p->next);
        p->next->next = p;
        if (p == head)
        {
            p->next = NULL;
        }
    }
} 
struct num *creat(int n)
{
    struct num *phead, *ptail, *pnew;
    pnew = (struct num *)malloc(sizeof(struct num));
    scanf("%d", &pnew->a);
    phead = ptail = pnew;
    for (int i = 1; i < n; ++i)
    {
        pnew = (struct num *)malloc(sizeof(struct num));
        scanf("%d", &pnew->a);
        ptail->next = pnew;
        ptail = pnew;       
    }
    ptail->next = NULL;
    return phead;
}
void prt(struct num *head)
{
    struct num *p;
    p = head;
    while(p != NULL)
    {
        printf("%d->", p->a);
        p = p->next;
    }
    printf("NULL\n");
}
int main(int argc, char const *argv[])
{
    struct num *p;
    int n = 0;
    scanf("%d", &n);
    p = creat(n);
    p = reverse(p);
    prt(p);
    return 0;
}

结果

GDB

姜硬啊!rua!

2017/04/01 9:11

#include <stdio.h>
#include <stdlib.h>
#define M 20
struct num
{
    int a;
    struct num *next;
};
struct num *reverse(struct num *head, struct num *lhead, struct num *nhead)
{
    struct num *p, *q;
    p = head;
    if (p->next == NULL)
    {
        nhead = p;
    }
    else
    {
        nhead = reverse(p->next, lhead, nhead);
        p->next->next = p;
        if (p == lhead)
        {
            p->next = NULL;
        }
    }
    return nhead;
}
struct num *creat(int n)
{
    struct num *phead, *ptail, *pnew;
    pnew = (struct num *)malloc(sizeof(struct num));
    scanf("%d", &pnew->a);
    phead = ptail = pnew;
    for (int i = 1; i < n; ++i)
    {
        pnew = (struct num *)malloc(sizeof(struct num));
        scanf("%d", &pnew->a);
        ptail->next = pnew;
        ptail = pnew;       
    }
    ptail->next = NULL;
    return phead;
}
void prt(struct num *head)
{
    struct num *p;
    p = head;
    while(p != NULL)
    {
        printf("%d->", p->a);
        p = p->next;
    }
    printf("NULL\n");
}
int main(int argc, char const *argv[])
{
    struct num *p;
    int n = 0;
    scanf("%d", &n);
    p = creat(n);
    p = reverse(p, p, p);
    prt(p);
    return 0;
}

终于调好了,递归函数还是好玩啊。我欲成仙 快乐无边

递归实现不带头结点的单链表逆置 阅读详情

相关推荐

SDUT_单链表逆置递归

数据结构实验之链表三:链表的逆置Time Limit: 1000 ms Memory Limit: 65536 KiBSubmit StatisticProblem Description输入多个整数,以-1作为结束标志,顺序建立一个带头结点的单链表,之后对该单链表的数据进行逆置,并输出逆置后的单链表数据。Input输入多个整数,以-1作为结束标志。Output输出逆置后的单链表数据。Sample...

Guojing_Huang的博客 772

逆置单链表——递归与非递归

文章目录前言方式一:非递归原理图解实现代码方式二:递归原理图解实现代码完整实现代码运行结果 前言 单链表的逆置图解 方式一:非递归 原理 非递归逆置单链表的本质是创建一个新的链表,遍历原先的链表,利用头插法将节点插入新的链表当中去。 图解 实现代码 //链表节点定义 typedef struct link_list{ int data; struct link_list *next; }singel_link_t; /************************************

Aa_lihua的博客 3681

递归的大量应用----单链表的逆置

//用递归实现逆置单链表 **typedef struct Node { int data; struct Node *next; }Node; typedef Node * Link; //单链表的逆置,缺点就是必须是 //带头结点的单链表可是是空表 //不带头结点的单链表至少需要一个结点 void __reversed__(Link Prior_Link,Link Now_Li...

xjlovewjh的博客 1012

单链表反转(逆置)——(四种方法实现)

链表逆置就是把最后以一个提到坐前面,倒数第二个放到第二个……直到第一个到最后一个。 由于链表没有下标,所以不能借助下表来实行数据的逆置,要靠空间的转移来完成链表的逆置 这里采用没有头节点的链表来实现逆置。 第一种——头插法 算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。 #include <stdio.h> #include <stdli...

m0_58397166的博客 8万+

避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧)

本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。

lake5的博客 860

Python量化入门:用pytdx获取800个交易日K线数据的完整指南(附代码)

本文为Python量化交易初学者提供了使用pytdx库免费获取股票日线级别K线数据的完整指南。文章详细介绍了从环境搭建、单只股票数据获取,到构建健壮的批量下载器、数据清洗与验证,再到基础分析与可视化的全流程,并附有可直接运行的代码示例,帮助读者快速建立本地股票数据库。

weixin_29050513的博客 1469

单链表的逆置方法

前言 单链表的逆置方法有很多种,此文简要说明以下两种方法 1.头插法 2.就地逆置法 3.递归 1.头插法 主要思路:遍历的过程中,将遍历的每一个元素依次插入到表头header之后 代码如下: void ReverseList(LinkList& head) { LinkList p,q; p = head->next; head->next = NULL; while (p) { q = p; p = p->next; q->next = hea

Vagrant_pursue的博客 2万+

PuTTY使用方法

PuTTY是一款开源SSH/Telnet客户端,主要用于Windows系统连接Linux服务器。使用步骤包括:下载安装PuTTY,输入服务器IP和端口(默认22),可选择保存会话配置。支持密码和SSH密钥认证(需转换.pem为.ppk格式)。首次连接需确认主机密钥,成功登录后可执行Linux命令。其他功能包括会话日志记录、X11转发和端口隧道配置。操作完成后输入exit断开连接。

特网云计算 3169

链表基础3——单链表的逆置(c语言实现)

递归法的好处是代码简洁,但递归深度较大时可能会导致栈溢出。

2301_80224556的博客 6969

CCS安装教程图解说明:可视化步骤快速上手

通过清晰的图解步骤详解CCS安装过程,帮助新手快速掌握环境搭建。结合ccs安装教程与实际操作界面,每一步都直观易懂,大幅降低学习门槛,提升配置效率。

weixin_42611310的博客 964

TTL转RS422(B)工业级转换模块设计:从原理到实战部署

在工业自动化与嵌入式系统中,串行通信是实现设备间数据交换的基础。其核心原理在于通过特定的电气标准与协议,将数据位序列化后进行传输。RS422作为一种差分平衡传输协议,相比常见的TTL电平,在抗共模干扰与远距离传输能力上具有显著的技术优势,这使其成为工业现场总线、楼宇自动化等对可靠性要求严苛场景的优选方案。要实现TTL设备与RS422网络的稳定互联,关键在于设计一个能够完成单端信号到差分信号高质量转换的硬件模块。这涉及到差分总线收发器芯片的选型、包含终端电阻与TVS二极管的保护电路设计,以及遵循差分走线规则的

weixin_29195615的博客 342

单链表的逆置(递归和非递归)

单链表的递归和非递归逆置 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef char linktype; typedef struct linklist{ linktype data; struct linklist *next; }linklist; void linklistinit(linklist **...

mignatian的博客 4359

STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可。 1、键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样这个8个引脚都是高电平,然后就进行列扫描。例如:假如按下3按钮,Y3 列扫描,把F4先拉低,然后读取F0-F3的状态,就会读出为1110,这就可 以知道是F3行拉低了,同时这时候是程序控制F4拉低的,这样就可以知道是F4列导致它转态变化了的,这样就可以定位出是F4列F3行的按键按下了;其他的列也是这样子扫描

lhh_qrsly的博客 7059

单链表的逆置(c语言)

单链表

没技术的博客 3161

【机器学习-17】数据变换---小波变换特征提取及应用案列介绍

小波变换作为一种前沿的数据分析工具,近年来在信号分析领域崭露头角。小波分析的理论和方法凭借其独特优势,在信号处理、图像处理、语音处理、模式识别以及量子物理等多个领域得到了广泛的应用,堪称近年来在工具及方法上的重大突破。小波变换以其多分辨率的特性,在时域和频域均展现出对信号局部特征的强大表征能力。通过伸缩和平移等运算过程,小波变换能够对信号进行多尺度聚焦分析,为非平稳信号的时频分析提供了一种有效手段。它允许我们由粗及细地逐步观察信号,从而精准地提取出有用信息。

qq_38614074的博客 2万+

2026华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Python实现。

MISAYAONE的博客 29万+

递归逆置带头结点的单链表_C/C++&Java

递归逆置带头结点的单链表_C/C++&Java 这周的算法作业之一,逆置这步倒不是很难想。 逆置这步就先递归到最深层,让尾巴指向自己的父节点,然后返回到父节点,让node.next.next指向node就可以实现指向父节点,之后每返回到上层就这样执行,所以递归调用代码要在node.next.next = node 这行代码之前执行。 但是昨晚有两个问题没想出来,就一直困扰着我。 怎么让头...

滑技工厂的博客 3818

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python递归逆置一条单链表详解

递归逆置的做法真的很巧妙,最好要画图自己

2138

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

单链表就地逆置递归与非递归的方法

//1.用递归算法,对于不带头结点的单链表(a1,a2,a3,a4,a5,a6)逆置后的结果为(a6,a5,a4,a3,a2,a1) //考虑递归算法,若只有一个结点,则直接返回,若存在两个结点(a1,a2)则需要做的操作有:      a2->next=a1;a1->next=NULL;return a2; //a2即新的头结点,若有三个结点,则应先将子链(a2,a3)先逆置且返回该子链的新

lzh8430000的专栏 2397

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

单链表逆置的递归与非递归算法 [简单的小算法练习]

[问题表述]单链表逆置的算法,不管是递归还是非递归的情况下,其实策略有多种,此处只列出其中一种 [问题解答] /* * main.cpp * * Created on: 2009-6-24 * Author: NeeSky */#include using namespace std;/** *Single Link List a

#define Refuse_无聊@代码.COM Roy_Nee 4012

单链表逆置非递归实现

##单链表逆置非递归实现## public class LinkedUtils { public static void main(String[] args) { Node head = new Node(1); Node node2 = new Node(2); Node n...

259

单链表逆置的三种方法(头插法逆置、就地逆置、递归逆置)顺序表【数组】的逆置的代码实现(使用java语言实现,用对象模拟内存结构和指针)

单链表节点定义 /** * className:LNode * * @author:zjl * @version:0.1 * @date:2020/7/1622:25 * @since:jdk1.8 */ public class LNode { private Object data; private LNode next; public LNode() { this.data = null; this.next = null;

weixin_38334306的博客 1389

单链表逆置-java(递归与非递归)

单链表逆置-java(递归与非递归)结点是一个自定义的类Node:private class Node { public int value; public Node nextNode; public Node(int value) { this.value = value; } }递归方法用的是栈的思想,想把头结点入栈,接着头结点的下一个结点入栈,直

良秋的专栏 5474

数据结构 递归算法解决单链表成对逆置问题。

单链表成对逆置 关于苏州大学872考研中出现的单链表成对逆置问题。 LinkList D_Reverse(LinkList &L){ if(L==NULL||L->next==NULL) return L; LNode *p = L->next,*q = p->next; p->next = L; L->next = D_Reverse(q); return p; } ...

Leemars1的博客 1763

单链表的就地逆置(头插,就地,递归)

http://blog.youkuaiyun.com/lycnjupt/article/details/47103433https://blog.youkuaiyun.com/v_xchen_v/article/details/53067448单链表的就地逆置是指辅助空间O(1)的逆置方法,有两种方法:普通循环(头插法重新建立带头节点的新链表)和递归。下面我们详细介绍这两种方法:方法一:头插法算法思想:逆置链表初始为空,...

qq_40529035的博客 6648

在大牛眼里不堪一击的带头节点单链表递归逆置代码

将带头结点的单链表逆置 在考研备考期间,我碰到了一道算法题:将带头结点的单链表逆置,最开始的思路并不是用递归,而是交换链表数据,但发现这方法也太复杂了吧,还要多次循环才能搞定,之后突发奇想,试试用递归发现还真的很好用,代码简单明了 。 简单写下,然后跑去备考咯! void reverse(Node* P){ if(P->next==NULL) return; Node *pre=P;//保存前驱节点 Node *i=pre->next;//保存后继结点

weixin_44338591的博客 611
上一篇: 单项链表排序
下一篇: 阿里笔试题一
sevanco
博客等级 码龄12年 4粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值