写一个算法:删除单链表中自第i个元素起的loungth个元素
2个回答
展开全部
typedef struct _LNode
{
int data;
struct _LNode *next;
}LNode, *LinkList;
void DelNodes(LinkList head, int i, int k)
{
if(i>0 && k>0)
{
LNode *pre = head, *start = head->next, *last;
while((NULL != start) && (--i > 0))
{
pre = start;
start = start->next;
}
if(NULL == start)//个数小于i
return;
last = start;
while((NULL != last) && (--k > 0))
last = last->next;
if(NULL == last)//不足k个
return;
last = last->next;
//删除start至last之前的k个结点
pre->next = last;
while(start != last)
{
LNode *del = start;
start = start->next;
free(del);
}
}
}
{
int data;
struct _LNode *next;
}LNode, *LinkList;
void DelNodes(LinkList head, int i, int k)
{
if(i>0 && k>0)
{
LNode *pre = head, *start = head->next, *last;
while((NULL != start) && (--i > 0))
{
pre = start;
start = start->next;
}
if(NULL == start)//个数小于i
return;
last = start;
while((NULL != last) && (--k > 0))
last = last->next;
if(NULL == last)//不足k个
return;
last = last->next;
//删除start至last之前的k个结点
pre->next = last;
while(start != last)
{
LNode *del = start;
start = start->next;
free(del);
}
}
}
展开全部
Status ListDelete_L(LinkList&l,int i,ElemType &e)
{//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
p=L;j=0;
while(p->next && j<i-1)
{//寻找第i个结点,并令p指向其前驱
p=p->next;++j;}
if(!(p->next)||j>i-1)
return error; //删除位置不和理
q=p->next; //删除并释放结点
p->next=q->next;
e=q->data; free(q);
return OK;
}//ListDelete_L
{//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
p=L;j=0;
while(p->next && j<i-1)
{//寻找第i个结点,并令p指向其前驱
p=p->next;++j;}
if(!(p->next)||j>i-1)
return error; //删除位置不和理
q=p->next; //删除并释放结点
p->next=q->next;
e=q->data; free(q);
return OK;
}//ListDelete_L
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询