1.在第i个元素之前插入元素数据e:
while(p && j<i-1){p=p->next;++j}
while循环中找到第i-1个结点,此时p代表第i-1个结点的地址。仅判断p不为null。不需要判断p->next,p->next是否为null与需求无关,因为p->next为null,则在该链表最后加入一个结点,若不为null,则在链表中间的某处加入一个结点。
若刚好最后一个结点为第i-1个结点,此时第i个元素为链表长度+1个结点,第i-1个结点的指针域为null,(即在链表最后插入一个数据域为e的结点,p->next为null),则插入完成后,刚插入的元素的指针域为null。
if(!p||j>i-1)return ERROR;
if条件判断,若p为null或者i的值小于1,返回ERROR;\
2.将第i个数据元素删除
while(p->next && j<i-1){p=p->next;++j}
while循环中找到第i-1个结点,此时p代表第i-1个结点的地址。
若刚好最后一个结点为第i-1个结点,此时第i个元素为链表长度+1个结点,第i-1个结点的指针域为null,则删除无意义。
所以要判断p->next是否为null,因为删除的是第i个数据元素,而p->next代表的是第i个数据元素的地址。
if((!p->next )||j>i-1)return ERROR;
判断若第i个元素的地址为空,或者i的值小于1,返回ERROR