设计一个在带头结点的单链表中删除第i个结点的算法

 我来答
当代教育科技知识库
高能答主

2019-10-26 · 擅长科技新能源相关技术,且研究历史文化。
当代教育科技知识库
采纳数:1828 获赞数:387385

向TA提问 私信TA
展开全部

//删除节点 删除第i个节点
int Delete_Positon_LL(LinkList *phead,int i)
{
LinkList p,q;//p为值是x的节点,q是p的前一个节点
int j;

if((*phead)->next == NULL)//如果链表为空,做下溢处理
{
printf("单链表为空!\n");

return 0;
}
if(i == 1) //如果是表头,表头后移
{

p=(*phead)->next;
(*phead)->next=(*phead)->next->next;
free(p);//释放表头


扩展资料:

链接方式存储的线性表简称为链表(Linked List)。链表的具体存储表示为:

① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)

② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))

链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构

参考资料来源:百度百科-单链表

NO1蓝色阳光
推荐于2017-09-30 · TA获得超过1844个赞
知道小有建树答主
回答量:720
采纳率:50%
帮助的人:59.4万
展开全部
//删除节点 删除第i个节点
int Delete_Positon_LL(LinkList *phead,int i)
{
LinkList p,q;//p为值是x的节点,q是p的前一个节点
int j;

if((*phead)->next == NULL)//如果链表为空,做下溢处理
{
printf("单链表为空!\n");
return 0;
}
if(i == 1) //如果是表头,表头后移
{
p=(*phead)->next;
(*phead)->next=(*phead)->next->next;
free(p);//释放表头
}
else //从第二个节点查找值是x的
{
q=(*phead)->next;
p=(*phead)->next->next;
j=2;
//注意先p !=NULL,否则将出现非法访问操作
while(p !=NULL && j<i )
{
q=p;
p=p->next;
j++;
}

if(p!=NULL)//找到了
{
q->next=p->next;//让前一个节点指向p的后继节点
free(p);//删除节点p
}
else
{
printf("删除第%d个节点超出范围.\n",i);
return 0;
}
}

return 1;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
有钱买不起房子
2011-07-01 · TA获得超过4326个赞
知道大有可为答主
回答量:1249
采纳率:100%
帮助的人:2086万
展开全部
//删除节点 删除第i个节点
int Delete_Positon_LL(LinkList *phead,int i)
{
LinkList p,q;//p为值是x的节点,q是p的前一个节点
int j;

if((*phead)->next == NULL)//如果链表为空,做下溢处理
{
printf("单链表为空!\n");
return 0;
}
if(i == 1) //如果是表头,表头后移
{
p=(*phead)->next;
(*phead)->next=(*phead)->next->next;
free(p);//释放表头
}
else //从第二个节点查找值是x的
{
q=(*phead)->next;
p=(*phead)->next->next;
j=2;
//注意先p !=NULL,否则将出现非法访问操作
while(p !=NULL && j<i )
{
q=p;
p=p->next;
j++;
}

if(p!=NULL)//找到了
{
q->next=p->next;//让前一个节点指向p的后继节点
free(p);//删除节点p
}
else
{
printf("删除第%d个节点超出范围.\n",i);
return 0;
}
}

return 1;

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-06
展开全部
第一总算法
设两个指针p,q
p<-head
repeat
{
q<-p.next
repeat
{
if (p.data=q.data)
else q<-q.next
}until q=nul
p<-p.next
}until (p=null) or (p.next=null)
时间为O(n*n) 空间O(1)
还有一种算法
设一个指针p
数组 hash[1..maxnumber] as type byte
p<-head
repeat
{
if (hash[p.data]=1 ) else
}until p=null
时间为O(n) 空间O(m)
另外,站长团上有产品团购,便宜有保证
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式