问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在数据结构单链表中如何实现倒序输出

发布网友 发布时间:2022-08-16 00:58

我来回答

5个回答

热心网友 时间:2023-09-25 10:47

如下:
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
int data;
node* pNext;
}Node;

//链表的操作,以有头节点为例,无头节点类似
Node* head = NULL;

//创建链表,头结点data=0,pNext=NULL;
bool createNodeList()
{
head = (Node*) malloc(sizeof(Node));
if(NULL == head)
{
return false;
}
else
{
head->data = 0;
head->pNext = NULL;
return true;
}
}

//增加节点
bool addNode(Node* node)
{
if(NULL == head)
{
return false;
}
Node* p = head->pNext;
Node* q = head;
while(NULL != p)
{
q = p;
p = p->pNext;
}
q->pNext = node;
node->pNext = NULL;
return true;
}

//删除节点
bool deleteNode(int index)
{
if(NULL == head)
{
return false;
}
Node* p = head->pNext;

int length = 0;
while(NULL != p)
{
length ++;
p = p->pNext;
}

if(length < index)
{
return false;
}
else
{
Node* q = head;
p = head;
for(int i=0;i<index;i++)
{
q = p;
p = p->pNext;
}
Node* t = p->pNext;
q->pNext = t;
free(p);
return true;
}
}

//逆序
void reverseNodeList()
{
if(NULL == head)
{
return;
}
//如果链表长度为1
if(head->pNext == NULL)
{
return;
}
Node* p = head->pNext;
Node* q = p->pNext;
Node* t = NULL;
while(NULL != q)
{
t = q->pNext;
q->pNext = p;
p = q;
q = t;
}
head->pNext->pNext = NULL;
head->pNext = p;
}

//排序(降序)
void sort()
{
//冒泡排序
Node* pHead = head;
if(head == NULL)
{
return;
}
if(pHead->pNext == NULL)
{
return;
}
Node* pi = pHead->pNext;
Node* pj = pi->pNext;
for(;pi != NULL;pi=pi->pNext)
{
for(pj = pi->pNext;pj != NULL;pj=pj->pNext)
{
if(pj->data>pi->data)
{
int tmp = pj->data;
pj->data = pi->data;
pi->data = tmp;
}
}
}
}
//销毁
void destroyNodeList()
{
if(NULL == head)
{
return;
}
if(NULL == head->pNext)
{
free(head);
head = NULL;
return;
}
Node* p = head->pNext;
while(NULL != p)
{
Node* tmp = p;
p = p->pNext;
free(tmp);
}
free(head);
head = NULL;
}

void main()
{
createNodeList();

Node* node1 = (Node*)malloc(sizeof(Node));
node1->data = 1;
node1->pNext = NULL;

Node* node2 = (Node*)malloc(sizeof(Node));
node2->data = 2;
node2->pNext = NULL;

addNode(node1);
addNode(node2);

reverseNodeList();

Node* node3 = (Node*)malloc(sizeof(Node));
node3->data = 3;
node3->pNext = NULL;

addNode(node3);

sort();

deleteNode(2);

destroyNodeList();
}

热心网友 时间:2023-09-25 10:48

一般倒序输出要用双向链表。
你也可以顺序遍历链表,然后把数据存到数组中,最后把数组倒序输出。

热心网友 时间:2023-09-25 10:48

弄个栈吧,遍历进栈然后逐个出栈

热心网友 时间:2023-09-25 10:49

最好是将单链表遍历,将元素压入栈,然后将栈中元素取出。

热心网友 时间:2023-09-25 10:50

倒叙那个循环是错的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求狗狗不能吃的东东? 魔兽世界60级猎人带什么宝宝的问题 沈阳苹果手机售后维修点有哪些 沈阳哪里修理手机比较好一点 妈咪,胸口第三根肋骨骨折吃什么可以补。 胸口肋骨断掉最适宜的方法? ...不小心胸口摔着了,上周去医院查出左侧4 5肋骨骨折,当时医生只配了两... 有百度文库VIP账号的大神们可以帮我下载这个文档吗 百度文库免费下载ppt方法介绍-百度文库怎么免费下载ppt 初中英语翻译 在线等! 求C语言单链表倒序遍历程序~ 化学有机物的sp轨道分别是什么? s或p的几次方代表什么? s1 p1 中有固定的原子么? 不小心把办公室柜子的钥匙弄丢了,在不破坏锁的情况下,怎么才能打开呀?是那种3个抽屉一个锁的那种。 用什么方法教育孩子爱上学习 英语作文可爱的弟弟 英语作文我的弟弟(写多一点,演讲用) 有关写弟弟的英语作文(60词) 以我的弟弟为题目的英语作文 300词左右 以“我的弟弟”为题写一篇100词的英语作文 英语作文弟弟 oppo年终奖一般几个月 问了好多人,都说OPPO年终奖很丰厚,是真的吗? oppo年终奖绩效c有年终奖吗 OPPO年终奖为什么这么高?有没有在OPPO工作的人,介绍下 怎样减肥肚子不饿? 怎样不饿肚有效减肥 经营宗旨的类型 被子植物与裸子植物相同之处是( )A.有花的各部B.有种子C.有果实D.双... 4月份冰箱温度调到多少冷藏排水孔才不结冰 上市公司分红,比如10送10股啊,10送现金红利多少多少啊,是什么意思? 如何实现链表的倒序输出 关于单链表逆序输出的问题,如果不用递归的话,怎么解决,自己写了段代码,一运行就崩溃。求大神赐教。 逆序一个单链表,C语言 链表倒序排列 求解C语言数据结构链表倒序思路 英语万圣节的习俗40字 文案|“充满希望的治愈系句子” 电脑虚拟内存设置了有用吗 我的衣服上有superman字样,不知啥意思?能穿吗? 你好,我现在也遇到了被套路贷强制下款的贷款,谈怎么处理 衣服上只写着superman的t恤是什么牌子啊和这个应该是同个牌子 龙岗世贸百货superman衬衫标志质量怎么样的? superman正品衣服哪里有卖 为什么Superman 的S变成R IPAD AIR 全民飞机大战 怎么和微信好友玩 全民飞机大战如何添加微信里没有的好友。而对方有你,还能给你送体力 什么是精血 精血和普通血液有什么区别? 女生的精血指什么 精血的精血简介