bool LinkInsert(LinkList*& L, int i, int& e)
{
	//在带头节点的单链表L中第i个位置插入值为e的新节点
	int j;
	LinkList* p, * s;
	p = L;
	j = 0;
	while (p && j < i - 1)//查找第i-1个节点,p指向该节点
	{
		p = p->next;
		j++;
	}

	if (!p || j > i - 1) {//i>n+1或者i<1
		return false;
	}

	s = new LinkNode;//生成新节点
	s->data = e;//将新节点的数据域置为e
	s->next = p->next;//将新节点的指针域指向节点ai
	p->next = s;//将节点p的指针域指向节点s
	return true;
}

现在有一个链表L

3605be652125ddb45446cfabf3aa1ea9.jpg

我们要在第三个节点插入数据5,现在有三个变量 j  p  s;

        int j;
	LinkList* p, * s;
	p = L;
	j = 0;

37025b4e5fdea1da51d8091f831af847.jpg

当j=0的时候,开始循环

       while (p && j < i - 1)//查找第i-1个节点,p指向该节点
	{
		p = p->next;
		j++;
	}

45d58b6c85871e3cd36f163b5f0fa875.jpg

然后j++, j=1了,继续循环

7c80a48931d298a2d8732f6b89bae568.jpg

j++,j=2了,j<i-1不存在,跳出循环,这个时候p=a2


现在new一个节点a5,并且赋值给s,s = new LinkNode;

4043cf8d2a9a0fa0a3df6689c50a2961.jpg

s->data=e;

df943efb861bd44a67bc615905e5fb59.jpg

s->next=p->next;

dc6e6e48bbc865423aefa031a1135bf5.jpg

p->next=s;

c53b748202b42acadea7b3c6e4e0af26.jpg

这样就是一个新的链表:

6668221419b8ecc02fab12ccb07b9558.jpg