单链表插入删除

来源:互联网 发布:c语言是否有指针 编辑:程序博客网 时间:2024/06/04 19:33

在链表的插入删除操作上理解起来比顺序表更为容易,其不需要变动在i位置前的所有的元素,只需要修改节点指针即可。

插入:

设在链表的i位置插入新元素,设i-1节点的指针域为p,设插入的节点指针域为s,所以插入操作应该为:

s->next=p->next;将s的后缀改为p的后缀,p的后缀是原来的第i个点的指针域,将其给s的后缀说明此时的s是第i个节点的前一个节点。

p->next=s;;将p的后缀改为s。

第一条语句是将s插在第i个之前,第二条语句将s放在第i-1个之后,因此完成了链表的插入。(s->data=e)

删除:

设在第i个节点前删除节点,设p为被删除位置的前驱节点,q为被删除位置的节点。因此插入操作为:

q=p->next;将q改为p的后缀节点,说明q即为要删除的位置。

p->next=q->next;将p的后缀改为q的后缀,说明此时并没有q这个节点了。

e=q->data;free(q);

第一句是申明删除节点在p之后保证位置,第二句是删除语句。

并不是很难理解,主要是弄清它们的前驱后缀关系,另外要删除或插入首先要解决位置在哪的问题。

另外在这里再写上如何来寻找这样的第i个位置:

while(p&&j<i-1)

{

p=p->next;

++j;

}

if(!p || j!=i-1)

return ERROR;

此时的p即为删除点的前驱了。

 

 

 

 

0 0
原创粉丝点击