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;
我想知道为什么会发生这种情况,因为这两组陈述看起来都是等价的。
答案 0 :(得分:1)
Place3是最重要的区别。当您编写pre=temp
时,仅修改了本地变量pre
,而不是前一个节点到下一个节点的链接。这就是您的链接列表没有显示新元素的原因。