浙江大学数据结构(2.1.5链式存储的插入和删除)

3.插入(在第i-1(1<=i<=n+1)个结点后插入一个值为X的新节点)

  1. 先构造一个新节点,用s指向;
  2. 再找到链表的第i-1个结点,用p指向;
  3. 然后修改指针,插入结点(p之后插入新结点是s):s->Next=p->Next;p->Next=s;
// 插入操作实现
List Insert(Element Type X,int i,List PtrL)
{
 List p,s;
 if (i==1)
    {
     s=(List)malloc(sizeof(struct LNode));
     s->Data=X;
     s->Next=PtrL;
     return s;
    }
 p=FindKth(i-1,PtrL);
 if (p==NULL)
    {
     printf("参数i错");
     return NULL;
    }
 else 
    {
     s=(List)malloc(sizeof(struct LNode));
     s->Data=X;
     s->Next=p->Next;
     p->Next=s;
     return PtrL;
    }
}

4.删除(删除链表的第i(1<=i<=n)个位置上的结点)

  1. 先找到链表的第i-1个结点,用p指向;
  2. 再用指针s指向要被删除的结点(p的下一个结点);
  3. 然后修改指针,删除s所指结点
  4. 然后释放s所指结点的空间
// 删除操作实现
List Delete(int i,List PtrL)
{
 List p,s;
 if (i==1)
    {
     s=PtrL;
     if (PtrL!=NULL) PtrL=PtrL->Next;
     else return NULL;
     free(s);
     return PtrL;
    }
 p=FindKth(i-1,PtrL);
 if (p==NULL)
    {printf("第%d个结点不存在",i-1);return NULL;}
 else if (p->Next==NULL)
    {
     printf("第%d个结点不存在",i);
     return NULL;
    }
 else
    {
     s=p->Next;
     p->Next=s->Next;
     free(s);
     return PtrL;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值