求解一个C语言函数的作用

//在pHead所指向链表的第pos个节点的前面插入一个新的结点,该节点的值是val, 并且pos的值是从1开始bool insert_list(PNODE pHead, int pos, int val){ int i = 0; PNODE p = pHead;
while (NULL!=p && i<pos-1) { p = p->pNext; ++i; }
if (i>pos-1 || NULL==p) return false;
//如果程序能执行到这一行说明p已经指向了第pos-1个结点,但第pos-1个节点是否存在无所谓 //分配新的结点 PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pNew) { printf("动态分配内存失败!\n"); exit(-1); } pNew->data = val; //将新的结点存入p节点的后面 PNODE q = p->pNext; p->pNext = pNew; pNew->pNext = q;
return true;}
这个是数据结构中链表功能的实现中的一个函数,函数我看得懂while (NULL!=p && i<pos-1) { p = p->pNext; ++i; }
if (i>pos-1 || NULL==p) return false;
,但是我不懂得这个思路是如何来的??高手请给点建议!

第1个回答  2013-10-13
你是哪一步没看懂,其实和把大象装进冰箱的原理差不多
第一步、找到位置。while (NULL!=p && i<pos-1) { p = p->pNext; ++i; } 这一步,就是要让链表移动到插入位置,p此时就是pNew插入后的前一个结点。
第二步,插入数值。PNODE q = p->pNext; p->pNext = pNew; pNew->pNext = q; 让p的指针域存入pNew的地址,PNew的指针域存入p原指针域存入的地址q,这样就成功让p指向q的模式转变为p指向pNew,pNew指向q的模式,也就成功插入了pNew了
相似回答