链表逆序输出

首先,我们需要了解,逆序输出不是把数据对应位置改变,而是仅仅改变链接顺序。
方法一:迭代链表。使用循环,遍历链表,每一步,反转一个链接。
方法二:递归。
方法一:
过程:先使第一个结点指向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相关推荐

  1. 数据结构:链表逆序输出

    数据结构(一):链表逆序输出 题目描述:创建一个链表,并将链表逆序输出,链表中以输入0作为结束 关键代码详解: 附:全部代码 #include<stdio.h> #include<s ...

  2. 语言print如何实现连续输出_【每日一题】如何实现一个高效的单向链表逆序输出?...

    今后,动力节点Java学院将每天为大家带来一道大厂面试真题,这些面试题都是大厂技术专家们结合多年的工作.面试经验总结提炼而成的面试真题. 通过这些面试题,还可以间接地了解技术大牛们出题思路与考察要点. ...

  3. 阿里开发者招聘节 | 面试题01:如何实现一个高效的单向链表逆序输出?

    面试,如同玩一场饥饿游戏:既要对环境了然于胸,又要对自身心知肚明.发现一个好工作不容易,但成功应聘又会面临一系列的挑战. 为帮助开发者们提升面试技能.有机会入职阿里,云栖社区特别制作了这个专辑--阿里 ...

  4. 单链表逆序输出(递归)

    将单链表逆序输出 对于单链表逆序输出不改变链表结构可以考虑使用递归实现. 递归输出的主要思路为:先输出除当前节点外的后继子链表,然后输出当前结点.假如链表为:1->2->3->4-& ...

  5. C语言-链表逆序输出

    逆序输出 (10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输入格式: ...

  6. java 链表逆序代码_如何实现一个高效的单向链表逆序输出?(详解)

    需要考虑因素,高效应权衡多方面因素 数据量是否会很大 空间是否有限制 原始链表的结构是否可以更改 时间复杂度是否有限制 一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段 题目. ...

  7. java单链表逆序输出_在数据结构单链表中如何实现倒序输出

    引用du瓶邪的回答: 如下: #include #include typedef struct node { int data; node* pNext; }Node; //链表的操作,以有头节点为例 ...

  8. 2020-07-25:如何实现一个高效的单向链表逆序输出?

    福哥答案2020-07-25: 1.链表反转.反转,输出,反转. 2.递归. 3.数组.遍历存数组,然后反向遍历数组. 4.栈.遍历存栈,然后pop栈输出. golang代码采用第2种方法.代码如下: ...

  9. C语言的单链表逆序和指定范围逆序

    文章目录 前言 逆序 指定范围逆序 源码实现 前言 关于链表的逆置,是考察对链表指针的理解.知道了如何不实用额外空间,同时使用O(n)复杂度对链表进行逆序之后将会对链表有好理解. 同时关于如何在指定范 ...

最新文章

  1. 如何下载指定版本的torchtext
  2. Git CMD - show: Show various types of objects
  3. 用户创建自定义的参数ID
  4. vim特殊符号的意义
  5. SRAM BIST技术学习
  6. 数据库Mysql的学习(六)-子查询和多表操作
  7. WEBSOCKET协议判断 握手及反馈
  8. python配置文件密码管理_用户配置文件和密码配置文件,用户组管理和用户管理...
  9. 士林变频器面板如何调速度_工业电气设计|变频器在应用中的故障处理实例分享...
  10. leetcode.1024. 视频拼接
  11. 线程池为啥要用阻塞队列
  12. HTML中添加超链接、音频标签、视频标签、内嵌框架标签
  13. python pip 安装使用国内镜像源
  14. 光耦使用教程——以4N25为例
  15. Win7系统无法验证文件数字签名(0xcoooo428)最佳解决方法
  16. uniapp map 地图
  17. 【学习日志】学习总结
  18. PMP考试自学可以吗? 一分钟让你搞清楚
  19. 如何把大的‘tar‘存档文件分割成特定大小的多个文件
  20. 利用 matlab 完全消音 进行歌曲人声提取 超简单 四行代码

热门文章

  1. 中国公司进行海外招聘应该注意什么?
  2. 人到了一定年纪,会明白六个道理
  3. 华为FreeBuds 5降噪好不好?
  4. Linux 下最简单快捷的端口转发软件 redir 简介
  5. 微信小程序 绝对路径 require
  6. Linux下搭建stackedit本地环境
  7. cocos2d-x游戏iphone移植到android需要注意事项
  8. 20170918深圳东方博雅笔试
  9. git本地项目关联远程仓库
  10. python手记(四):pillow(一) Image类简单图片处理