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

这只是实现函数部分:voidlist::AddList(intaData)//实现在末尾增加结点{intcount;Node*p;p=head;while(p!=NULL... 这只是实现函数部分:
void list::AddList(int aData) //实现在末尾增加结点
{
int count;
Node *p;
p = head;
while(p != NULL) //计算链表长度
{
count++;
p = p->next;
}
for(int i = 0; i<count; i++) //遍历链表,在链表末尾增加结点
{
if(p->next == NULL)
p->Data = aData;
}
}

编译不出错,但是连while循环都进不去。
我还是把我写的函数实现都贴上来吧,觉得对指针就是没有感觉啊。。。
void list::DeleteList(int bData) //实现删除结点
{
Node*p,*q;
p = head;
for(int j = 0; j<5; j++)
{
if(p->Data == bData)
{
q->next = q->next;
delete p;
}
}
} //我知道q没有初始化,但是不知道要怎么初始化。

void list::InsertList(int cData,int a) //实现插入结点
{
Node* p,*q,*s;
p = head;
s=(Node*) new (Node);
s->Data = a;
q = p;
q->Data = cData;
q->next = s;
for(int l = 0; l<5; l++)
{
if(p->Data == cData)
{
p->next = q;
q->next = s;
}
}
} //可以通过编译,但是应该是没有运行,其实这个函数也是参考百度上找到的一些代码。

void list::PrintList()
{
Node* p;
p = head;
while(p != NULL)
{
cout<<p->Data<<endl;
p = p->next;
};
} //杯具的是居然连输出链表函数都不能执行了。。。。。唉~

求大虾!!!!

请大虾们在修改时对增加或是改动的地方做些解释...谢谢了!!
展开
 我来答
百度网友2512bd658
推荐于2018-04-11 · 超过12用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:37.9万
展开全部
我给你个评价,错误百出, 你没有理解链表,对着书好好做几次。我一条一条给你评
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也有很大问题,都是基本的,好好看书吧
百度网友090399b
2010-06-08 · TA获得超过167个赞
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:122万
展开全部
你的:p=head;也就是说你的结点p是指向你的链表的头结点的,但是头结点的作用只是一个标志结点,它之中没有存储数据的。也就是这样的:
p->data==NULL;
p->next=x;//x为链表的第一个存储数据的结点
你把while循环改一下试试;
while(!(p->next))
这样就可以了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linshimiaolin
2010-06-08 · 超过10用户采纳过TA的回答
知道答主
回答量:93
采纳率:0%
帮助的人:41.8万
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式