首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C在双链接列表中插入N个位置的节点

使用C在双链接列表中插入N个位置的节点
EN

Stack Overflow用户
提问于 2016-05-24 08:05:48
回答 4查看 6.7K关注 0票数 1
代码语言:javascript
复制
 void InsertAtN() 
 {
    int get,i;
    struct node* temp=(struct node*) malloc(sizeof(node)),*temp1,*temp2;
    printf("\nEnter the Position : ");
    scanf("%d",&get);
    printf("\nEnter the Data : ");
    scanf("%d",&temp->data);
    if(get==1 || head==NULL)
    {
        if(head==NULL && get==1)
        {
            temp->prev=temp->next=NULL;
            head=temp;
            return;
        }
        head->prev=temp;
        temp->prev=NULL;
        temp->next=head;
        head=temp;
        return;
    }
    temp1=head;
    for(i=0;i<get-2;i++)
    {
        temp1=temp1->next;

    }
    temp->next=temp1->next;
    temp->prev=temp1;
    temp1->next=temp;
    temp2=temp->next;
    temp2->prev=temp;

}

在这里,当我在中间或开始插入一个节点时,它是工作的。但是,当我试图在末尾插入一个节点时,这将使crash..please帮助我走出困境。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-05-24 08:28:05

最后,我调试了我的code..This是帮助男人的最后一个code...Thanks :)

代码语言:javascript
复制
void InsertAtN()
{
    int get,i;
    struct node* temp=(struct node*) malloc(sizeof(node)),*temp1,*temp2;
    printf("\nEnter the Position : ");
    scanf("%d",&get);
    printf("\nEnter the Data : ");
    scanf("%d",&temp->data);
    if(get==1 || head==NULL)
    {
        if(head==NULL && get==1)
        {
            temp->prev=temp->next=NULL;
            head=temp;
            return;
        }
        head->prev=temp;
        temp->prev=NULL;
        temp->next=head;
        head=temp;
        return;
    }
    temp1=head;
    for(i=0;i<get-2;i++)
    {
        temp1=temp1->next;

    }
    temp->next=temp1->next;
    temp->prev=temp1;
    temp1->next=temp;
    if(temp->next!=NULL)
    {
    temp2=temp->next;
    temp2->prev=temp;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-05-24 08:24:22

不要在最后一行使用temp2->prev=temp,而是编写

代码语言:javascript
复制
if (temp2)
    temp2->prev=temp

因为在最后一个位置插入时,temp2NULL

票数 2
EN

Stack Overflow用户

发布于 2016-05-24 08:25:35

假设只有一个节点。您的for loop无法运行,因此temp1指向第一个节点。那你就做了

代码语言:javascript
复制
temp2=temp->next; //temp2 is NULL
temp2->prev=temp; //NULL->prev

当只有一个节点时,您必须处理这个情况,并且尝试在最后插入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37407712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档