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

C++ 在链表末尾增加结点

发布网友 发布时间:2024-05-08 10:49

我来回答

3个回答

热心网友 时间:2024-07-08 21:02

我给你个评价,错误百出, 你没有理解链表,对着书好好做几次。我一条一条给你评
void list::AddList(int aData)
{
int count;
Node *p;
p = head;
//之所有没进while 是因为head==NULL,
//也就是你的链表为空链表
//可能你的链表的表头不是以空元素来代替,
while(p != NULL)
{
count++;
p = p->next;
}

//for循环的意思是找到第count元素吧?
//但是你没有 p = p->next,p一直在原地踏步
for(int i = 0; i<count; i++)
{
//while循环结束后,p一定为空,p->next会出致命
//但你的count也为0,所以for循环也进不去.
if(p->next == NULL)
p->Data = aData;
}
}
//更改: 说实话,你的算法不好,
//为了让你知道错哪里,我尽量按你的思路去做吧.
void list::AddList( int dData )
{
int count = 0;//下次记得初始化
//产生一个节点,初始化最好用构造函数.
Node* pNode = new Node;
pNode->Data = dData;
pNode->next = NULL;

if ( head == NULL )//链表为空,直接赋值给head
{
head = pNode;
return ;
}

Node* p = head;
while( p != NULL )
{
count++;
p = p->next;
}
p = head;//while结束后,p一定为空,重新赋值

for( int i = 0; i < count-1; i++ ) //只能是count-1
{
p = p->next;
}
//结束后p指向最后一个元素

p->next = pNode;//把结点加入链表

return;

}

void list::DeleteList(int bData)
{
Node*p,*q;
p = head;//没有对head==NULL判断,会出致命
for(int j = 0; j<5; j++)//为什么只找5次,节点上限为5?
{
if(p->Data == bData)
{
q->next = q->next;//这个......相当于 i = i;
delete p;
}
}
} //我知道q没有初始化,但是不知道要怎么初始化。

更正:
void list::DeleteList( int bData )
{
if ( head == NULL )//链表为空,无所谓删除
return;

Node* pCurr = NULL;
Node* pTemp = NULL;

pCurr= head;
while( pCurr != NULL )
{
if ( pCurr->Data != bData )//当前不是,向后找
{
pTemp = pCurr;//将当前的保存
pCurr = pCurr->next;
}
else
break;
}
if ( pCurr == NULL )//没有符合要求的结点
return;

if ( pTemp == NULL )//如果只有一个节点, pTemp == NULL
{
delete pCurr;
head = NULL;//这句一定要写
}
else
{
pTemp->next = pCurr->next;
delete pCurr;
}

return ;

}

你的printList()的输出函数不执行,是因为head==NULL, 你的是一个空链表
InsertList也有很大问题,都是基本的,好好看书吧

热心网友 时间:2024-07-08 21:03

你的:p=head;也就是说你的结点p是指向你的链表的头结点的,但是头结点的作用只是一个标志结点,它之中没有存储数据的。也就是这样的:
p->data==NULL;
p->next=x;//x为链表的第一个存储数据的结点
你把while循环改一下试试;
while(!(p->next))
这样就可以了!

热心网友 时间:2024-07-08 21:03

void list::AddList(Linklist&L int aData) //实现在末尾增加结点
{

Node *p;
p = L;
while(p ->next!= NULL)
{
p = p->next;
}
q=(Node*)malloc(sizeof(Node));
if(!q) exit(OVERFLOW);//分配空间不成功
q->data=aData;
q->next=NULL;
p->next=q;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
甄嬛传之鸾凤还巢 与甄嬛传是一样的吗 周季风齐王纳谏的中心思想 求《邹忌讽齐王纳柬》的中心思想? 华为录音快捷键在哪里设置? 华为快捷录音怎样设置 为什么要大张旗鼓的放弃一个人? 11年的捷达喷油嘴打马达一直喷油是怎么回事 平板电脑适用的win10win10平板电脑用哪个版本好 [小区禁止饲养家禽的条例]禁止饲养家禽家畜规定 我说女朋友不爱我心里没有我她生气不理人怎么办? 将所指节点插入到链表末尾 存在天然气的生产中,听说可核算最大泄漏量是否达到爆炸下限的20%,如... 巨野离大义远吗? 宣城到山东荷泽市巨野县大义镇北彭堂村驾车线路 昆明昆达电表厂三相4线接线图 广东海军陆战队出来待遇怎么样啊? 海军陆战队退伍军人适合的就业范围及需求量,待遇层次! 海军陆战队退役士官安置待遇适用兵役法 在工地学木工带班好吗?学的期间4500一个月。'自己吃。还没有我现在高... 海口到上海怎么走? 手续费的科目介绍 手续费计入什么科目 非营利组织银行手续费计入什么科目? ...购买转账支票费用计入管理费用的办公费还是手续费?没有财务费用科目... ...银行帐户维护费等银行手续费要记入那个会计科目 票务系统管理软件 民办非银行手续费放哪个科目 ...以前用卡提洛尔和派立明,停药1个礼拜,眼压又跑到22~23 谷歌五儿子哪些软件可以删除 怎么判断一个人说真话还是假话 长期戴隐形眼镜担心角膜感染,能不能滴左氧氟沙星滴眼液类似的药水... 建立一带头节点的单链表,新产生的节点总是插在链表的末尾怎么做 中国科技馆附近有哪些性价比高的民宿? 努力了珍惜了执着过不后悔的句子 15岁的小女孩出现幻听,是精神分裂症吗 宇宙飞船在轨道上飞行时处于“失重”状态,若宇航员在完全失重的太空轨道... 台州开投集团什么级别 支付宝余额转账到银行卡出现"银行处理失败"的原因 上海万科掌心湖原舍售楼处电话是多少? 九里香怎么浇水 九里香浇水多久一次 篮球快攻有那几种? 拉曼光谱分析有哪些优势? 听说张家口市农科院的杂交谷子特别雷,怎么联系呀,各位老大 宣化巡天种业新技术有限责任公司怎么样 准备的翻译是:什么意思 什么性格的人易产生心理疾病? 结婚利大于弊还是弊大于利 ...女生说你呀。男生又回了女生一个QQ小猫抽烟的表情。是啥意思_百度知... 东台事业编面试成绩71.4怎么样 大众迈腾大灯不亮怎么维修? 想知道:梧州市 从金晖梧州汽车站到长发镇怎么坐公交?