数据结构:闲敲棋子落灯花之链表逆序输出Reverse
链表逆序输出
首先,我们需要了解,逆序输出不是把数据对应位置改变,而是仅仅改变链接顺序。
方法一:迭代链表。使用循环,遍历链表,每一步,反转一个链接。
方法二:递归。
方法一:
过程:先使第一个结点指向NULL,需要注意,如果已经断开链接,如何查找到下一个链接,最后再用head指向。
在变量中跟踪前一个结点
我们需要反转当前指针,指向它的前一个结点,,所以要在变量中跟踪前一个结点,同时还要记录下一步的位置(遍历链表)。
struct Node* Reverse() {struct Node* current,*prev,*next;current = head;prev = NULL;while (current) {next = current->next;current->next = prev;prev = current;current = next;}head =prev;return head;
}
这里需要三个结点,prev、current、next,
先指示好下一步循环的结点,也就是next记好位置,current进行当前操作(反转链接),在把prev改变位置到下一步,其实也就是现在current的位置,最后current作为主体,后移。
总之是先记录位置,才可以在当前位置进行操作,而且操作完成之后,还要整体移到下一个位置进行循环。即,next记录位置,接着,一顿操作猛如虎(什么操作这么猛呢?current反转,变成前任。),current再去霍霍下一个结点。
方法二:
先来看一下递归顺序输出:
void Print(struct Node* p) {if (p == NULL) {printf("\n");return;}printf("%d ", p->data);Print(p->next);
}
下面是逆序:
void ReversePrint(struct Node* p) {if (p == NULL) {return;}ReversePrint(p->next);printf("%d ", p->data);
}
见函数就进去。
接下来是reverse函数递归:
void Reverse(struct Node* p) {if (p->next == NULL) {head = p;return;}Reverse(p->next);struct Node* q = p->next;q->next = p;p->next = NULL;
}
一步步回退,再删除释放。
此处,传入的是链表的头指针,p,递归一直进行,直到最后一个结点,head指向,再一步步return,用q指向改变链表顺序。
void Reverse(char* C, int n) {for (int i = 0;i < n;i++) {S.push(C[i]);}for (int i = 0;i < n;i++) {C[i] = S.top;S.pop();}
}
也可以利用栈的思想。
数据结构:闲敲棋子落灯花之链表逆序输出Reverse相关推荐
- 数据结构:链表逆序输出
数据结构(一):链表逆序输出 题目描述:创建一个链表,并将链表逆序输出,链表中以输入0作为结束 关键代码详解: 附:全部代码 #include<stdio.h> #include<s ...
- 语言print如何实现连续输出_【每日一题】如何实现一个高效的单向链表逆序输出?...
今后,动力节点Java学院将每天为大家带来一道大厂面试真题,这些面试题都是大厂技术专家们结合多年的工作.面试经验总结提炼而成的面试真题. 通过这些面试题,还可以间接地了解技术大牛们出题思路与考察要点. ...
- 阿里开发者招聘节 | 面试题01:如何实现一个高效的单向链表逆序输出?
面试,如同玩一场饥饿游戏:既要对环境了然于胸,又要对自身心知肚明.发现一个好工作不容易,但成功应聘又会面临一系列的挑战. 为帮助开发者们提升面试技能.有机会入职阿里,云栖社区特别制作了这个专辑--阿里 ...
- 单链表逆序输出(递归)
将单链表逆序输出 对于单链表逆序输出不改变链表结构可以考虑使用递归实现. 递归输出的主要思路为:先输出除当前节点外的后继子链表,然后输出当前结点.假如链表为:1->2->3->4-& ...
- C语言-链表逆序输出
逆序输出 (10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输入格式: ...
- java 链表逆序代码_如何实现一个高效的单向链表逆序输出?(详解)
需要考虑因素,高效应权衡多方面因素 数据量是否会很大 空间是否有限制 原始链表的结构是否可以更改 时间复杂度是否有限制 一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段 题目. ...
- java单链表逆序输出_在数据结构单链表中如何实现倒序输出
引用du瓶邪的回答: 如下: #include #include typedef struct node { int data; node* pNext; }Node; //链表的操作,以有头节点为例 ...
- 2020-07-25:如何实现一个高效的单向链表逆序输出?
福哥答案2020-07-25: 1.链表反转.反转,输出,反转. 2.递归. 3.数组.遍历存数组,然后反向遍历数组. 4.栈.遍历存栈,然后pop栈输出. golang代码采用第2种方法.代码如下: ...
- C语言的单链表逆序和指定范围逆序
文章目录 前言 逆序 指定范围逆序 源码实现 前言 关于链表的逆置,是考察对链表指针的理解.知道了如何不实用额外空间,同时使用O(n)复杂度对链表进行逆序之后将会对链表有好理解. 同时关于如何在指定范 ...
最新文章
- 如何下载指定版本的torchtext
- Git CMD - show: Show various types of objects
- 用户创建自定义的参数ID
- vim特殊符号的意义
- SRAM BIST技术学习
- 数据库Mysql的学习(六)-子查询和多表操作
- WEBSOCKET协议判断 握手及反馈
- python配置文件密码管理_用户配置文件和密码配置文件,用户组管理和用户管理...
- 士林变频器面板如何调速度_工业电气设计|变频器在应用中的故障处理实例分享...
- leetcode.1024. 视频拼接
- 线程池为啥要用阻塞队列
- HTML中添加超链接、音频标签、视频标签、内嵌框架标签
- python pip 安装使用国内镜像源
- 光耦使用教程——以4N25为例
- Win7系统无法验证文件数字签名(0xcoooo428)最佳解决方法
- uniapp map 地图
- 【学习日志】学习总结
- PMP考试自学可以吗? 一分钟让你搞清楚
- 如何把大的‘tar‘存档文件分割成特定大小的多个文件
- 利用 matlab 完全消音 进行歌曲人声提取 超简单 四行代码