bool insert_list(strcut node * pHead ,int pos ,int val)
struct node * p = pHead;
int i = 0; //注意i 的值就是p指向的链表的实际位置,此时p指向头结点(不是头结点的指针域)i=0
while(NULL != p&&i < pos-1)
{
p = p->next;
i++;// p指向第一个节点 ,i=1。p指向第n个节点,i=n。(这两步没有先后顺序,视为同时进行的操作,所以如果i=pos-1,p就指向第pos-1个节点)
}
if(i > pos-1 || p = NULL)
return false;
一、为什么p是从头结点开始的
当pos=1时,要找pos-1位置即头结点,如果 p->pHead->pNext 那么指针已经指向第一个节点,无法对pos-1(头结点)的指针域操作,也就无法插入一个新节点。
二、while循环,&&语句只要有一个不成立,就退出。一共有三种情况。假设A条件为 NULL!=p,B条件为i < pos-1。
1、A不成立,B不成立
A不成立就是p指向了NULL,B不成立就是i=pos-1。
意思是p指向了NULL,并且p指向的位置是pos-1,画图可以看出这个条件是无法进行插入的。
2、A不成立,