//在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;
,但是我不懂得这个思路是如何来的??高手请给点建议!