单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序;另一种是把链表逆序。本文就分别实例讲述一下两种方法。具体如下:

1.逆序输出

实例代码如下:

#include

#include

#include

using namespace std;

typedef struct node{

int data;

node * next;

}node;

//尾部添加

node * add(int n, node * head){

node * t = new node;

t->data = n;

t->next = NULL;

if (head == NULL){

head = t;

}

else if (head->next == NULL){

head->next = t;

}

else{

node * p = head->next;

while (p->next != NULL){

p = p->next;

}

p->next = t;

}

return head;

}

//顺序输出

void print(node * head){

node * p = head;

while (p != NULL){

cout << p->data << " ";

p = p->next;

}

cout << endl;

}

//递归

void reversePrint(node * p){

if (p != NULL){

reversePrint(p->next);

cout << p->data << " ";

}

}

//栈

void reversePrint2(node * head){

stack s;

while (head != NULL){

s.push(head->data);

head = head->next;

}

while (!s.empty()){

cout << s.top() << " ";

s.pop();

}

}

int main(){

node * head = NULL;

for (int i = 1; i <= 5; i++){

head = add(i, head);

}

print(head);

reversePrint(head);

reversePrint2(head);

system("pause");

return 0;

}

逆序输出可以用三种方法: 递归,栈,逆序后输出。最后一种接下来讲到。

2.单链表逆序

实例代码如下:

#include

#include

#include

using namespace std;

typedef struct node{

int data;

node * next;

}node;

node * add(int n, node * head){

node * t = new node;

t->data = n;

t->next = NULL;

if (head == NULL){

head = t;

}

else if (head->next == NULL){

head->next = t;

}

else{

node * p = head->next;

while (p->next != NULL){

p = p->next;

}

p->next = t;

}

return head;

}

//循环

node * reverse(node * head){

if (head == NULL || head->next == NULL){

return head;

}

node * p1 = head;

node * p2 = head->next;

node * p3 = NULL;

head->next = NULL;

while (p2 != NULL){

p3 = p2;

p2 = p2->next;

p3->next = p1;

p1 = p3;

}

head = p1;

return head;

}

void print(node * head){

node * p = head;

while (p != NULL){

cout << p->data << " ";

p = p->next;

}

cout << endl;

}

//递归

node * reverse2(node * p){

if (p == NULL || p->next == NULL){

return p;

}

node * newHead = reverse2(p->next);

p->next->next = p;

p->next = NULL;

return newHead;

}

int main(){

node * head = NULL;

for (int i = 1; i <= 5; i++){

head = add(i, head);

}

print(head);

head = reverse(head);

print(head);

head = reverse2(head);

print(head);

system("pause");

return 0;

}

这里链表逆序用了两种方法:循环,递归。读者最容易理解的方法就是在纸上自己画一下。

希望本文所述实例对大家的数据结构与算法学习能有所帮助。

c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例相关推荐

  1. c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...

    「今天是学习C语言第 148 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」 # 静态链表 使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系.实现要点: 1.数组 ...

  2. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  3. 已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。

    创建链表,main函数中通过while循环找出该插入的位置,插入.应注意L头节点位置的变化,利用一个ptr来记录L的头节点. /*已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值 ...

  4. 用C语言求已知集合的笛卡儿乘积(离散数学)

    用C语言求已知集合的笛卡儿乘积(离散数学) 实验要求: 通过编程实现求给定集合A和B的笛卡儿乘积C(C=A×B)D(D=A×B×A)的运算. 实验内容 已知所给集合A和B,求A与B的笛卡儿乘积C(C= ...

  5. c语言已知xy求z,C语言运算已知x=3.2,y=7,z=2,计算y 3*x-2的值并输出

    x>=y>=z c语言 z>=y>=x;的意思是先求z>=y的值也就是4>=4;这个结果是真,也就是1然后求1>=x也就是1>=3,结果是假.就是0只要 ...

  6. (C语言)已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。

    (C语言)已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列. 输入样例: 5 2 4 9 10 11 6 1 2 4 6 7 8 输 ...

  7. c语言中头结点不为零怎么写,C语言不带表头结点的单链表操作

    什么是链表 简单理解为链表的功能与数组功能相似用来存储数据,链表作为一种基本的数据结构在程序开发过程当中经常会使用到.对C语言来说链表的实现主要依靠结构体(可以存储多种数据类型)和指针,所以本文相关内 ...

  8. c语言勾股定理已知斜边,C语言 · 勾股数

    勾股数 勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] ...

  9. 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...

    已知三角形三边分别为4,5,6,求三角形的面积.用c语言编写程序 关注:114  答案:6  mip版 解决时间 2021-01-18 16:33 提问者谁把流年搁浅 2021-01-17 23:52 ...

最新文章

  1. 严蔚敏《数据结构》C语言版 第三章 算法3.4 表达式求值
  2. IOS开发之__bridge,__bridge_transfer和__bridge_retained
  3. 二叉树的遍历 (递归和非递归实现)
  4. 关于oracle sql语句查询时表名和字段名要加双引号的问题
  5. Docker Harbor 2.3.4 集群 双主复制高可用镜像仓库
  6. 信息学奥赛一本通 1110:查找特定的值 | OpenJudge NOI 1.9 01
  7. mysql 导入dmp_mysql导入导出sql文件
  8. 示波器1m和50欧姆示阻抗匹配_为什么示波器阻抗一般是1M欧或者50欧
  9. 安装和客户端证书颁发---puppet系列
  10. 互联网公司这一年,我被迫知道了这些内幕和秘密...
  11. [转]出租车中的MBA
  12. 首个集成BNB应用侧链链游Meta Apes,必看全新测评与攻略
  13. 【概率论与数理统计】1.1 随机事件及其运算
  14. 领导越讲人情,团队越不行?
  15. 计算机学院早操规定,计算机学院早操动员大会顺利召开
  16. 塑源码是什么_源码是什么意思啊
  17. linux内核zfs,Linus Torvalds回应用户抱怨:不建议使用 ZFS On Linux
  18. 跑分超小米10,“性能旗舰”iQOO 3 5G未发先火!
  19. web 前端签名插件_signature_pad插件实现电子签名功能
  20. 【面试流水账】一年半经验前端年底求职路

热门文章

  1. SAP CRM One Order框架里旧式的索引表设计原理
  2. Social Media Modify case - still about attribute_ref
  3. SAP UI5应用的footer区域绘制原理和入口
  4. SAP UI5里关于时区问题转换的JavaScript代码
  5. 如何使用SAP Cloud for Customer里的ABSL代码调用Web service
  6. python php perl,python 调用 php 范例
  7. 细胞计算机生命游戏,【图片】【20170108 其它內容】【转】生命游戏【三体吧】_百度贴吧...
  8. adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
  9. 职高计算机自我鉴定800字,中专生自我鉴定800字与中专生计算机专业自我鉴定汇编...
  10. python运行程序的快捷键_在Python集成开发环境中,可使用快捷键()运行程序。...