这是我在C中写的方法。它用于插入链表。
void insert_beg()
{
temp=(struct node*)malloc(sizeof(struct node));
ptr=(struct node*)malloc(sizeof(struct node));
int data_value;
printf("Enter the value\n");
scanf("%d",&data_value);
temp->info=data_value;
if(header->link==NULL)//when there is no node
{
header->link=temp;
temp->link=header;
}
else//when atleast one node has been created
{
ptr->link=header->link;//ptr is pointing to where header was pointing.
header->link=temp;
temp->link=header;
}
printf("\n\n");
}
这是遍历的代码(基本显示)
void traverse()
{
ptr=header->link;
while(ptr->link!=header)
{
ptr=ptr->link;
printf("%d\t",ptr->info);
}
printf("\n\n");
}
运行程序时,遍历的输出无效。好像for循环没有运行。插入或任何其他东西时没有分段错误。 我的逻辑是否正确?如果没有,那么我哪里出错?
答案 0 :(得分:1)
由于错误的分配,原始的header->link
值会丢失。
此外,您不需要malloc
来获取变量ptr
。修改你的if / else块。
if (header == NULL){
header = temp
header->link = temp
}
else//when atleast one node has been created
{
ptr=header->link;//ptr is pointing to where header was pointing.
header->link=temp;
temp->link=ptr;
}
基本上,你总是试图用你的else block
添加第二个位置,但不是将旧数据放到第三位,而是指向你的第二个位置。
我也看到了上述代码的一些基本问题。代码既不接受指针变量也不返回任何指针。函数返回后,无法访问数据。
如果header是全局变量,那么这应该是更改。 malloc
的{{1}}以及与temp
相关联的所有其他内容都应移至temp
块内,因为我们else
部分不需要它们
if
如果标题不是全局变量然后解决完整问题,则应将函数修改为
if (header->link == NULL){
header->data = data
header->link = header
}