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;
}