xiaopangtou123 2016-05-20 13:37 采纳率: 28.6%
浏览 1600

链表的删除操作,删除头节点就会出问题 大家看看问题出在哪里呢

struct Link *DeleteNode(struct Link *head,int nodeData)//链表的删除
{
struct Link *p = head,*pr = head;
if (head == NULL)//首先需要判断链表是否为空!若空!无需执行删除操作!
{
printf("No Linked Table!\n");
return(head);
}
while(nodeData != p->data && p->next != NULL)//若没找到nodeData且未到表尾,则继续找!
{
pr = p;
p = p->next;
}
if (nodeData == p->data)
{
if(p == head)//判断是否删除首节点
{
head = p->next;//
}
else
{
pr->next = p->next;
}
free(p);
}
else
{
printf("this Node has not been found!");
}
return head;
}


![![图片说明](https://img-ask.csdn.net/upload/201605/20/1463751461_306312.png)图片说明](https://img-ask.csdn.net/upload/201605/20/1463751455_321660.png)图片说明

int main()
{
int i = 0;
int place = 0;
int nodeData;
char c;
struct Link *head = NULL;//指向链表头
printf("Do you want to append a new node(Y/N)");
scanf(" %c",&c);
while(c=='Y' || c=='y')
{
head = AppendNode(head);
DispLink(head);//显示当前各节点信息
printf("Do you want to append a new node(Y/N)");
scanf(" %c",&c);
i++;
}
printf("%d new nodes have been appended!\n",i);
printf("please input the nodeData you want to delete:");
scanf("%d",&nodeData);
DeleteNode(head,nodeData);
DispLink(head);
printf("please input the nodeData you want to insert:");
scanf("%d",&nodeData);
printf("输入插入的位置");
scanf("%d",&place);
InsertNode01(head,nodeData,place);
DispLink(head);
//InsertNode(head,nodeData);

//DeleteMemory(head);//释放分配内存
return 0;

}


  • 写回答

8条回答 默认 最新

  • threenewbee 2016-05-20 13:40
    关注

    代码都没有,怎么知道。不过根据以往问问题人一般的问题,估计是你先释放了内存后删除的节点,会导致出错。
    你的程序貌似出现了死循环,看下是不是出现了链表循环引用的问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。