数据结构非循环单链表的插入函数:
//插入节点,目的: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) //pos从1开始,i从0开始,pos-1使i和pos的值同步 { p = p->pNext; ++i; } if (i > pos - 1 || NULL == p) return false; //如果程序能执行到这一行说明p已经指向了第pos-1 (i) 个结点,但第pos-1个节点是否存在无所谓 PNODE pNew = (PNODE)malloc(sizeof(NODE)); //分配新的结点 if (NULL == pNew) { printf("动态分配内存失败\n"); exit(-1); } //将新的结点存入p节点的后面 pNew->data = val; PNODE q = p->pNext; //临时静态分配一个内存,PNODE类型的指针变量q,储存p->pNext,使得q指向pos节点 p->pNext = pNew; //p (pos-1)的指针域 指向 新节点 pNew->pNext = q; //q指针的值赋给新节点的指针域,使得新节点的指针域 指向 pos return true; }
理解在代码注释写了,代码运行过程理解如下:举例当pos的值为3的时候,运行过程图: