永发信息网

怎样删除链表中的数据?

答案:3  悬赏:30  手机版
解决时间 2021-11-07 17:00
  • 提问者网友:活着好累
  • 2021-11-07 12:26
怎样删除链表中的数据?
最佳答案
  • 五星知识达人网友:逐風
  • 2021-11-07 14:03
如果链表表头不是设置成全局,可以用下面函数处理
//删除节点 删除值为m的节点
//*phead为表头指针
int deleteNode(LinkList *phead,int m)
{
LinkList p,q;//p为值是m的节点,q是p的前一个节点

if(*phead == NULL)//如果链表为空,做下溢处理
{
printf("单链表为空!\n");
return 0;
}
if((*phead)->data == m) //如果表头值为m,删除表头
{
p=*phead;
*phead=(*phead)->next;
free(p);//释放表头
}
else //从第二个节点查找值是m的
{
q=*phead;
p=(*phead)->next;
//注意先p !=NULL,否则因没有于m等值的节点将出现非法访问操作
while(p !=NULL && p->data!=m )
{
q=p;
p=p->next;
}

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

return 1;

}
全部回答
  • 1楼网友:老鼠爱大米
  • 2021-11-07 15:31
void deleteNode(int m)
{

}中没有给出数据结构类型的接口,也不是成员函数的关系,就不能操作该结构体可写成如下
void deleteNode(int m,struct node *head)
{
struct node*ptr=head;
for(ptr)
{
if((ptr->next)->date==m) ptr->next=(ptr->next)->next;//删除的是ptr的下一个指针 判断的也是下一个指针
ptr++;
}
}
  • 2楼网友:琴狂剑也妄
  • 2021-11-07 15:07
很好理解,
while(p && k{
p=p->next;
k++;
}
// 此处while的作用,是把指针定位到第i个节点的前一个节点,
// 也就是说,循环结束时,p指向要删除节点的前一个节点

q=p->next;
//上句中q就是第i个节点,也就是你要删除的节点

p->next=q->next;
// 这句呢,p此时指向要删除节点的前一个节点,q就是要删除的节点,
// 那么这句就是:删除节点的前一个节点的下一个节点就是删除节点
// 的下一个节点。追问方法里的参数是某个元素的值,要把那个值删掉,里面的代码具体怎么写?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯