大话数据结构——链表插入删除操作
程序员文章站
2022-03-22 20:03:21
...
链表删除:
删除L的第i个数据元素,并用e返回其值,L的长度减1.
循环结束后,p指向第i-1个结点,p->Next指向第i个结点。
如果第i个结点不存在,则p->Next==None,无法删除第i个结点。
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j;
j=1;
LinkList p,q;
p=*L;
while(j<i ||p->Next)
{
p=p->Next;
++j;
}
if(p->Next==None || j>i)
{
return ERROR;//第i个元素不存在
}
q=p->Next;
*e=q->data;
p->Next=q->Next;
free(q);
}
链表的插入操作
顺序线性表L已经存在
操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1
首先要找到第i-1个结点,p指向第i-1个结点,s->Next=p->Next,p->Next=s
循环结束后p指向第i-1个结点,如果p==None,则第i-1个结点为空,此时找不到第i个结点的地址,故无法在第i个结点之前插入元素
Status ListDelete(LinkList *L,int i,ElemType *e)
{
int j;
j=1;
LinkList p,s;
p=*L;
while(j<i || p)
{
p=p->Next;
++j;
}
if(p==None || j>i)
return error;
s=(LinkList)malloc(sizeof(Node));
s->Next=p->Next;
p->Next=s;
s->data=e;
return OK;
}