单链表插入操作
URL:http://jpkc.onlinesjtu.com/CourseShare/Courses/ResourceModule/PreReading.aspx?courseid=701018&nodid=238&chapterid=238&preid=16
单链表的插入操作
1)已知线性链表head,在p指针所指向的结点后插入一个元素x.
在一个结点后插入数据元素时,操作较为简单,不用查找便可直接插入.
操作过程如下图所示:
相关的语句如下:
{ s=(slnodetype*)malloc(sizeof(slnodetype)); //申请一个结点s
s->data=x; //s的数据域存入x
s->next=p->next;p->next=s;} //s结点插入到p结点之后
2)已知线性链表head,在p指针所指向的结点前插入一个元素x.
前插时,必须从链表的头结点开始,找到P指针所指向的结点的前驱。设一指针q从附加头结点开始向后移动进行查找,直到p的前趋结点为止。然后在q指针所指的结点和p指针所指的结点之间插入结点s。
操作过程如下图所示:
相关的语句序列如下:
{q=head; //q在程序中是用来表示结点p 的直接前驱结点,在寻找之前,先对q初始化,指向头结点
while(q->next!=p) q=q->next; //寻找p结点的前驱结点q
s=(slnodetype*)malloc(sizeof(slnodetype)); //创建新结点s
s->data=x; //新结点s的数据域保持数据x
s->next=p; // 接下来两个语句用于将s 结点插入到q结点之后
q->next=s;}
阅读此篇文章时,注意到在单链表中某个结点之前或者之后插入一个新的结点的操作是完全不一样的。