在函数中不是有q->next=p;这时q是插入前的尾节点。那样q的的下一个(新插入的节点)就由q指向节点里的字段next指向了。
单链表的插入只需让s->next 和p->next的指针做一点改变即可。
s->next = p->next;
p->next = s;
单链表第i个数据插入结点的算法思路是:
1、声明一个指针p指向链表的第一个结点,初始化j从1开始;
2、当j< i 时,遍历链表,让p的指针向后移动,不断指向下一结点,j累加1;
3、若到链表末尾p为空,说明第i个元素不存在;
4、否则查找成功,在系统中生成一个空结点s;
5、将数据元素e赋值给s->data;
6、单链表的插入标准语句 s->next = p->next; p->next = s;
7、返回成功。
扩展资料
单链表的建立有头插法、尾插法两种方法。
1、头插法
单链表是用户不断申请存储单元和改变链接关系而得到的一种特殊数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。
链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。
2、尾插法
若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是头结点。