数据结构insert_list函数的理解

数据结构非循环单链表的插入函数:

//插入节点,目的: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的时候,运行过程图:


猜你喜欢

转载自blog.csdn.net/loongstyle/article/details/80371722