在循环链接列表中插入(输出未按需要输出)

时间:2016-09-26 12:11:47

标签: c linked-list insertion circular-list

这是我在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循环没有运行。插入或任何其他东西时没有分段错误。 我的逻辑是否正确?如果没有,那么我哪里出错?

1 个答案:

答案 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
}