插入链表C



我正在C中开发一个简单的文本编辑器。我在链表中插入元素时遇到了问题。

这是我的结构:

 struct node {
 struct node *previous;
 int c;
 int x;
 int y;
 struct node *next;
 }*head;

这是我的插入代码:

void checker(int ch, int xpos, int ypos)
{
    int flag=0;
    struct node *temp,*temp1,*insert_node=NULL;
    temp=(struct node *)malloc(sizeof(struct node));
    temp=head;
    while(temp!=NULL)
   {
        if(temp->x==xpos && temp->y==ypos)
        {
            insert_node->c=ch;
            insert_node->x=xpos;
            insert_node->y=ypos;
            if(temp->previous==NULL) //this is for inserting at the first
            {
                   insert_node->next=temp;
                   head=insert_node;
            }
            else                     //this is for inserting in the middle.
            {
                            temp1=temp;
                temp=insert_node;
                insert_node->next=temp1;
            }
                flag=1;
                            break;
            }
                temp=temp->next;
        }
//this one's for the normal insertion and the end of the linked list.
if(flag==0)
    characters(ch,xpos,ypos);
}

第一个和中间的插入都不起作用。我不知道哪里出了问题。请帮帮我。

temp=(struct node *)malloc(sizeof(struct node));
temp=head;

您正在为一个新节点分配空间,但随后您丢失了分配temp=head的这个新节点的地址。

问题是insert_node是函数checker()中的一个局部变量,它也被初始化为NULL。做insert_node->c意味着NULL->c,我相信你会同意我的观点,这是错误的。

在使用变量之前,请尝试为它们动态分配内存,这样就可以了。

insert_node在您发布的代码中始终为NULL。

此外,您可能希望对代码进行更多的拆分;首先在find()函数中隔离它的一部分。

相关内容

  • 没有找到相关文章

最新更新