[英]Hassle in Linkedlist in C
假设我已经在列表中有3个节点(即10,20)。 我要插入30。因此如下所示
struct node *p,*temp;
p=start;
temp=(struct node*)malloc(sizeof(struct node));
temp->info=30;
temp->link=NULL;
while(p-link!=NULL)
{
p=p->link;
}
p->link=temp;
在执行此操作之前,它一直运行良好: while(p!=NULL)
rest是相同的。类似地,在显示节点的情况下,我如下编写
while(p!=NULL)
{
printf("%d \n",p->info);
p=p->link;
}
直到我将其更改为: while(p->link!=NULL)
这也可以正常工作
我想知道发生了什么,为什么不起作用? 请告诉我为什么在显示所有数据的情况下使用while(p!= NULL)而在插入任何节点的情况下使用while(p-> link!= NULL)的原因?
C
中的链表是一个结构,其中包含数据和指向下一个元素的指针(可能还指向上一个元素的指针,但这似乎不是您的情况)。 就像这样:
struct node {
int data; //could be any type
struct node *next;
};
要将元素插入列表的末尾,您需要转到列表的末尾-当没有下一个元素时。 为此,请检查node->next == NULL
。 然后你使node->next = new_node
要在列表中找到一个元素,您需要循环搜索所有元素,直到找到它为止。 如果列表中不存在该元素,则需要防止用户访问无效的元素,因此请测试node == NULL
以安全地完成循环。 如果您只想打印列表中的所有数据,这种情况也适用-您需要访问所有元素,测试将是相同的(如果您正在测试node->next == NULL
,则将跳过最后一个元素) 。
在第一个while
循环之前,您已经有了类似的东西。 链表中的两个节点(不是您所说的三个),由start
指向,而新的节点由temp
指向:
start-->+---------+ +-->+---------+ +---------+<--temp
|info:10 | | |info:20 | |info:30 |
|link:xxxx|--+ |link:NULL| |link:NULL|
+---------+ +---------+ +---------+
要将新节点添加到列表的末尾,您需要从第一个节点(由start
指向)前进p
直到p
指向link
为NULL
的节点(即直到p->link!=NULL
失败)为止p->link!=NULL
是真实的):
start-->+---------+ +-->+---------+ +---------+<--temp
|info:10 | | |info:20 | |info:30 |
|link:xxxx|--+ |link:NULL| |link:NULL|
+---------+ +---------+ +---------+
^
|
p -+
一旦找到了最后一个节点,就可以在新节点中“铅垂”,以获得三元素列表:
start-->+---------+ +-->+---------+ +-->+---------+
|info:10 | | |info:20 | | |info:30 |
|link:xxxx|--+ |link:yyyy|--+ |link:NULL|
+---------+ +---------+ +---------+
但是,当您打印所有节点时,请在第一个节点处启动p
(即start
),并打印每个节点的详细信息,直到p
设置为NULL
(即p!=NULL
不能为真)。 如果在p->link
为NULL
时停止,则不会打印最后一个节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.