3.插入(在第i-1(1<=i<=n+1)个结点后插入一个值为X的新节点)
- 先构造一个新节点,用s指向;
- 再找到链表的第i-1个结点,用p指向;
- 然后修改指针,插入结点(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)个位置上的结点)
- 先找到链表的第i-1个结点,用p指向;
- 再用指针s指向要被删除的结点(p的下一个结点);
- 然后修改指针,删除s所指结点
- 然后释放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;
}
}