【发布时间】:2017-02-03 18:37:00
【问题描述】:
这是我用 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 循环没有运行一样。插入或任何其他事情时没有分段错误。 我的逻辑正确吗?如果不是,那我哪里错了?
【问题讨论】:
-
我认为条件应该是
if (header == NULL)。然后temp->link = ptr->link。否则你会失去原来的header->link -
在
insert_beg函数中,为什么会创建node的两个对象? -
@PRP 当我删除 ptr 对象时,代码的 else 部分出现问题。我遇到了分段错误。所以这就是为什么..
标签: c linked-list insertion circular-list