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;}
閱讀此篇文章時,注意到在單鏈表中某個結點之前或者之后插入一個新的結點的操作是完全不一樣的。