
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 = 0i<counti++)
{
//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 = 0i <count-1i++ ) //只能是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 = 0j<5j++)//为什么只找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也有很大问题,都是基本的,好好看书吧
student *add(student *head){
student *p=new student,*p1, *p2
cin>>p->num>>p->name>>p->eng>>p->math>>p->c
if (head == NULL) // 检查头指针是否为空, 是直接赋值
head = p
else// 否, 则遍历链表找到合适的位置插入新节点
{
p1 = head
while(p1!=NULL)
{
p2 = p1 // 保存当前节点
p1=p1->next // 进入下个节点
}
p1=p // 存储新节点
p2->next=p1 // 将新节点赋值到链尾
}
return head
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)