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

【数据结构·C语言】请高手帮忙检查一个关于【实现链表的就地逆置的算...

发布网友 发布时间:2023-12-24 20:13

我来回答

1个回答

热心网友 时间:2024-08-15 02:33

我已经把你给的代码在下列代码中做了具体实现,具体问题已在下列代码中说明

#include <iostream>
using namespace std;
#define OK true
#define FALSE false
typedef bool status;
typedef int INT32;

typedef struct tagLinkNode
{
INT32 key;
struct tagLinkNode *next;
tagLinkNode()//construct
{
key = -1;
next = NULL;
}
}LinkNode, *LinkList;

status createLinkList( LinkList &L)
{
INT32 nAccount = 0 ;//number of node in LinkList L
cout<<"input the num of node,please"<<endl;
cin>>nAccount;
//
//the first node is empty
//
L = ( LinkList ) malloc( sizeof( LinkNode) );
L->next = NULL;
LinkList pNow = L;

//create list
cout<<"import data:"<<endl;

for( INT32 i = 0; i<nAccount; i++ )
{
LinkList pTemp = ( LinkList ) malloc( nAccount * sizeof( LinkNode ) );
if( pTemp == NULL ) return FALSE;
pTemp->next = NULL;
INT32 nKey;
cin>>nKey;
pTemp->key = nKey;
pNow->next = pTemp;
pNow = pTemp;
}
return OK;
}
void clearLinkList( LinkList &L )
{
LinkList pNow = L;

while( pNow != NULL )
{
LinkList pTemp = pNow->next;
free( pNow );
pNow = pTemp;
}

L = NULL;
return ;
}
status inverseLinkList( LinkList &L )//这里的status说明你的代码应该是仿照书来写的,书上的代码一般是伪码
{
LinkList pNow = L,pTemp = L;// 你没有赋值
while( pNow != NULL )//traverse in first loop
{
//
//下面这句是不安全的,你没有判断pTemp->next的有效性
//
/*for( ; pTemp->next->next != NULL; pTemp = pTemp->next );*/

if( pTemp->next == NULL ) break;
if( pTemp->next->next == NULL )// 避免第一个节点丢失
{
break;
}

for( ; pTemp->next->next != NULL; pTemp = pTemp->next );//traverse in second loop 很显然算法的时间复杂度为0(n^2)
//
//下面三行代码有问题的,会丢失原链表中的第一个节点
//
pTemp->next->next = pNow->next;
pNow->next = pTemp->next;
pTemp->next = NULL;

pNow = pNow->next;
pTemp = pNow;
}
return OK;
}
void displayLinkList( LinkList L )
{
LinkList pNow = L->next;
cout<<"print LinkList:"<<endl;

while( pNow != NULL )
{
cout<< pNow->key <<" ";
pNow = pNow->next;
}
cout<<endl;
return ;
}
int main()
{
LinkList L = NULL;
createLinkList( L );// create LinkList

cout<<"before the operation of inversing"<<endl;
displayLinkList( L );

inverseLinkList( L );

cout<<"after the operation of inversing"<<endl;
displayLinkList( L );

clearLinkList( L );

system("pause");
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
梦幻西游我这吸血鬼值多少钱 梦幻西游吸血鬼价格问题,这个吸血鬼能卖多少钱啊?MHB比例100元=500W 给... 诚心求解梦幻西游,我这只吸血鬼能值多少钱?我要个能卖出去的价... 梦幻西游手游,我现在69级,买个79的吸血鬼,可以带吗, 我梦幻西游69J号买了个119级吸血鬼,但是不能摆摊出售,那可以跟别人交易... 梦幻西游手游洗出变异吸血鬼不能摆摊 梦幻西游本人80级 有一只吸血鬼 系统不给摆摊 请问能否交易 和平精英 和平精英封号了能注销掉吗? 梦见想蛇一样的东西掉进下水道 梦见包掉到下水道里 经济普查什么是产业单位 家用电话怎么接线最安全最省钱? 珠宝鉴定行业发展 怎样选择以下2个路径? o9年5月12的是什么星座 远看像座亭,近看没窗棂,上边直流水,下边有行人。打一物品! 佳能Power Shot A2300 数码相机 怎么样? 索尼DSC-W670 数码相机怎么... 财富v3多少资金 佳能A2300的镜头特点 怎么去螨虫好 自己在用的,绑定的手机号码被别人用了,可以登陆我的微信吗? 二建注册证遗失,但资格证、印章。离职证明,网上申请注销都有可以注销吗... 修改未满一年怎么修改 佳能数码相机PowerShotA2300 尼康数码相机S3300 哪个好点儿呢?请详细... 中国古代乃至世界历史上最早的专门论述教育、教学问题的论著是()。 帮忙起一个盗墓小说的名字类似盗墓笔记和鬼吹灯那种,谢谢如题 谢谢了... 计算:-2的x的6次方+(-3x的3次方)的2次方-[-(-2x)的2次方]的3次方 要求... 同一个手机号注册两个,新的刚注销,旧的怎么找回? 限时被封了,又用该手机号重新注册一个,能找回以前的... 汽车坐垫好不好? 不满一年如何更改? 对方通过搜索添加什么意思 不在正确长度范围内的帧会被交换机丢弃? ...显示的是对方通过搜索添加是什么意思? 全球公爵有什么用 一个手机二个怎么弄 自己在用的,绑定的手机号码被别人用了,可以登陆我的微信吗? 没有电子社保卡信息怎么回事 世界最早的专门论述教育问题的著作是中国古代的()。 谁有2007或2008的cad图库,给我发一下。收到可以用我加悬赏分 1521048507... 一个手机号怎么申请第二个? 被误改被限制1年后才能改回来怎么弄? 求CAD弱电图库安防监控类 如云台、半球摄像等、还有用CAD画电路``新手... 一个手机号注册两个怎么弄 联通流量超了是怎么收费的?? 我设置过一次了,还能改第二次吗?怎么改 手机号最近一年内已绑定过5个,已达到限制,无法再绑定!怎么办? 有一首歌名叫什么错 五维赖氨酸颗粒可以和维生素e一起服用吗 DNF大枪纯刷图加点怎么加? 韩商言这样的男朋友现实中真的存在吗?