插入函数insert_line中为神马要i>pos-1,i最大难道不是pos-1吗,i还可能出现比pos-1大的情况吗?

#include
#include
#include
#include
typedef struct note
{
int data;
struct note *pnext;
}NODE,*PNODE;

PNODE create_list(void);
void traverse_list(PNODE phead);
bool insert_line(PNODE phead,int pos,int val);

int main()
{
PNODE phead=NULL;
phead=create_list();
traverse_list(phead);
insert_line(phead,3,5);
traverse_list(phead);

return 0;

}
PNODE create_list(void)
{
int len;
int val;
printf("请输入想要创建的节点数:");
scanf("%d",&len);
PNODE phead=(PNODE)malloc(sizeof(PNODE));
PNODE ptail=phead;
ptail->pnext=NULL;
if(phead==NULL)
exit(-1);
int i;
for(i=0;i
printf("请输入第%d节点储存的值:",i+1);
scanf("%d",&val);
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=val;
ptail->pnext=pnew;
pnew->pnext=NULL;
ptail=pnew;
}
return phead;
}

void traverse_list(PNODE phead)
{
PNODE p=phead;
while(p!=NULL&&p->pnext!=NULL){
p=p->pnext;
printf("%d ",p->data);
}
return;

}
bool insert_line(PNODE phead,int pos,int val)
{
int i=0;
PNODE p=phead->pnext;
while(p!=NULL&&i
p=p->pnext;
i++;
}
if(p==NULL||i>pos-1){插入函数insert_line中为神马要i>pos-1,i最大难道不是pos-1吗,i还可能出现比pos-1大的情况吗?
return false;
}
PNODE pnew=(PNODE)malloc(sizeof(NODE));
if(pnew==NULL){
printf("动态分配内存失败");
exit(-1);
}
pnew->data=val;
PNODE q=p->pnext;
p->pnext=pnew;
pnew->pnext=q;

return true;

}

while(p!=NULL&&i<pos-1){
p=p->pnext;
i++;
}
if(p==NULL||i>pos-1){插入函数insert_line中为神马要i>pos-1,i最大难道不是pos-1吗,i还可能出现比pos-1大的情况吗?
return false;
}
这个while和if要关联着看。如果插入位置是有效的,while结束时,肯定p不为空,并且i=pos-1。所以,如果最终p=NULL,表示pos位置超过了链表的长度,是错误的。i>pos-1的条件确实可以不加。