遍历节点并在链接列表中间插入两种方法

时间:2015-10-24 07:36:52

标签: c insert linked-list

    void insert()
{   
    struct node *temp;
    struct node*pre=start,*count=start;
    int ps,i,c=0;
    printf("Enter the position where u want to insert\n");
    scanf("%d",&ps);
    if(ps==1)
        {insertbeg();}
    else
    {
     while(count!=0)
    {c++;
    count=count->link;}
            if(ps>c)
            {insertend(ps);}
                        else
                            {
                            temp=(struct node *)malloc(sizeof(struct node));
                                if (temp==NULL)
                                {printf("Memory is full\n");}
                                else
                                {
                                for(i=1;i<ps;i++) //place1
                                {pre=pre->link;}  
                                temp->link=pre;//place2
                                pre=temp;//place3
                                printf("Enter the element to inserted\n");
                                scanf("%d",&temp->data);
                                }
                            }
    }
}

代码运行但是无论何时我在中间位置插入任何元素,它都不会在开头插入时显示使用显示功能(insertbeg())并在结尾处插入(insertend())工作和显示一般。 当我在1,2和3位替换下面的行时,元素会正常显示。

for(i=1;i<ps-1;i++) 
temp->link=pre->link; 
pre->link=temp;

我想知道为什么会发生这种情况,因为这两组陈述看起来都是等价的。

1 个答案:

答案 0 :(得分:1)

Place3是最重要的区别。当您编写pre=temp时,仅修改了本地变量pre,而不是前一个节点到下一个节点的链接。这就是您的链接列表没有显示新元素的原因。