大话数据结构——链表插入删除操作

大话数据结构——链表插入删除操作

    • 链表删除:
    • 链表的插入操作

链表删除:

删除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;
}    

你可能感兴趣的:(数据结构)