c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例
单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序;另一种是把链表逆序。本文就分别实例讲述一下两种方法。具体如下:
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语言实现单链表逆序与逆序输出实例相关推荐
- c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
「今天是学习C语言第 148 天」 纸上学来终觉浅,绝知此事要躬行.-- 陆游「冬夜读书示子聿」 # 静态链表 使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系.实现要点: 1.数组 ...
- c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出
C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...
- 已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。
创建链表,main函数中通过while循环找出该插入的位置,插入.应注意L头节点位置的变化,利用一个ptr来记录L的头节点. /*已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值 ...
- 用C语言求已知集合的笛卡儿乘积(离散数学)
用C语言求已知集合的笛卡儿乘积(离散数学) 实验要求: 通过编程实现求给定集合A和B的笛卡儿乘积C(C=A×B)D(D=A×B×A)的运算. 实验内容 已知所给集合A和B,求A与B的笛卡儿乘积C(C= ...
- 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只要 ...
- (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 输 ...
- c语言中头结点不为零怎么写,C语言不带表头结点的单链表操作
什么是链表 简单理解为链表的功能与数组功能相似用来存储数据,链表作为一种基本的数据结构在程序开发过程当中经常会使用到.对C语言来说链表的实现主要依靠结构体(可以存储多种数据类型)和指针,所以本文相关内 ...
- c语言勾股定理已知斜边,C语言 · 勾股数
勾股数 勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] ...
- 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...
已知三角形三边分别为4,5,6,求三角形的面积.用c语言编写程序 关注:114 答案:6 mip版 解决时间 2021-01-18 16:33 提问者谁把流年搁浅 2021-01-17 23:52 ...
最新文章
- 严蔚敏《数据结构》C语言版 第三章 算法3.4 表达式求值
- IOS开发之__bridge,__bridge_transfer和__bridge_retained
- 二叉树的遍历 (递归和非递归实现)
- 关于oracle sql语句查询时表名和字段名要加双引号的问题
- Docker Harbor 2.3.4 集群 双主复制高可用镜像仓库
- 信息学奥赛一本通 1110:查找特定的值 | OpenJudge NOI 1.9 01
- mysql 导入dmp_mysql导入导出sql文件
- 示波器1m和50欧姆示阻抗匹配_为什么示波器阻抗一般是1M欧或者50欧
- 安装和客户端证书颁发---puppet系列
- 互联网公司这一年,我被迫知道了这些内幕和秘密...
- [转]出租车中的MBA
- 首个集成BNB应用侧链链游Meta Apes,必看全新测评与攻略
- 【概率论与数理统计】1.1 随机事件及其运算
- 领导越讲人情,团队越不行?
- 计算机学院早操规定,计算机学院早操动员大会顺利召开
- 塑源码是什么_源码是什么意思啊
- linux内核zfs,Linus Torvalds回应用户抱怨:不建议使用 ZFS On Linux
- 跑分超小米10,“性能旗舰”iQOO 3 5G未发先火!
- web 前端签名插件_signature_pad插件实现电子签名功能
- 【面试流水账】一年半经验前端年底求职路
热门文章
- SAP CRM One Order框架里旧式的索引表设计原理
- Social Media Modify case - still about attribute_ref
- SAP UI5应用的footer区域绘制原理和入口
- SAP UI5里关于时区问题转换的JavaScript代码
- 如何使用SAP Cloud for Customer里的ABSL代码调用Web service
- python php perl,python 调用 php 范例
- 细胞计算机生命游戏,【图片】【20170108 其它內容】【转】生命游戏【三体吧】_百度贴吧...
- adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
- 职高计算机自我鉴定800字,中专生自我鉴定800字与中专生计算机专业自我鉴定汇编...
- python运行程序的快捷键_在Python集成开发环境中,可使用快捷键()运行程序。...