链表插入的基本思想
上一个博客我们已经了解,链表的的查找,那么插入应该挺好理解的吧,我们已经
可以定位到它的前驱结点,然后改变它的前驱结点的值,让它指向需要插入的结构
体,然后把原始的前驱结点的NEXT赋值给你新插入进来的结构体,然后就完了。。
对 这就完了。。。
q指针是查找返回的值,p指针是新开辟地址,红色是初始指向,蓝色是程序结束的指向。
if (q == NULL) //新点插入到头结点的后面(原来第一个有效节点前面)
{
p->next = head->next;
head->next = p;
}
else if (q->next==NULL) //指定点不存在,应补充在链表的后面。
{
p->next = q->next;
q->next = p;
}
else
{
p->next = q->next;
q->next = p;
}
这段3段程序明显都是一个算法,可以进行简化,
if (NULL == pro)
{
q = head;
}
p->next = q->next;
q->next = p;
这个程序对照着图应该很容易看懂
然后结束了。。。。。
程序实现
void insert(point *head) //采用左插入节点方式
{
int newrows;
int newcols;
int oldrows;
int oldcols;
point *p;
point *pro;
showtopic("\n当前坐标如下,请参考插入位置进行左插入\n");
showpoints(*head);
showtopic("\n请输入将要插入的位置\n");
scanf("%d %d", &oldrows, &oldcols);
fflush(stdin);
pro = found(*head, oldrows, oldcols);
showtopic("\n请输入你要插入的数据\n");
scanf("%d %d", &newrows, &newcols);
fflush(stdin);
p = create(newrows, newcols);
if (NULL == pro)
{
pro = head;
}
p->next = pro->next;
pro->next = p;
}