C语言 在链表尾部添加节点

C语言 在链表尾部添加节点,第1张

加分了

#include<stdio.h>

#include<stdlib.h>

class point //节点

{

public:

int a //节点值

point *next//next指针

}

void newlast(point *&p,int i) //在*p所指的链表的最后新建一个值为i的节点

{

point *q,*o

q=p

while(q->next)

{

q=q->next

}

printf("%d\n",q->a)

o=(point *)malloc(sizeof(point))

o->a=i

q->next=o

o->next=NULL //结束标记

}

void show(point *p)//输出指针p所指链表

{

point *q

q=p

while(q)

{

printf("%d\t",q->a)

q=q->next

}

printf("\n")

}

int main()

{

point b1,b2,b3

point *p

b1.a=1

b2.a=2

b3.a=3

p=&b1

b1.next=&b2

b2.next=&b3

b3.next=NULL //结束标记

show(p)

newlast(p,4)

show(p)

return 0

}

我给你个评价,错误百出, 你没有理解链表,对着书好好做几次。我一条一条给你评

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也有很大问题,都是基本的,好好看书吧


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11614545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存