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;
}
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;
}
代码都没有,怎么知道。不过根据以往问问题人一般的问题,估计是你先释放了内存后删除的节点,会导致出错。
你的程序貌似出现了死循环,看下是不是出现了链表循环引用的问题。
麻烦您看看呢
贴出完整的代码,直接粘贴代码,不要用图片。点编辑框上</>
按钮,把代码放在三个引号中间。
删除头结点错误的,这里你传入的是head,所以只能改它指向的数据的值,改head的指向无效
解决方法:要么删除节点在外部删除,这边返回个删头节点的提示,要么传入二级指针(调用的时候先取址&head).要不然就标准的给一个专门的head指针作为永远的表头
建议楼主贴上完整的代码
上面贴的代码最后是return head?
需要找一个指针专门指向头结点
如果你确定只是删头结点有问题的话,可以这样做:
1.如果只有头结点,return NULL;
2.如果头结点有后续节点,把后续节点的data字段拷到头结点处,再删除后续节点;这个效果和删除头结点是等效的。
在定义函数的使用&来定义