已知单链表的结点结构定义如下:
typedef struct _NODE_
{
int data;
struct _NODE_ *next;
} NODE;
说明:data 为数据域。next 为指针域,指示后继结点。
请编写函数,删除带附加头结点的单链表中的全部数据元素结点。
函数原型
void Clear(NODE *head);
说明:参数 head 为单链表的头指针。函数删除单链表中除附加头结点以外的全部数据结点。
裁判程序
int main()
{
NODE *h;
Create(&h);
Input(h);
Clear(h);
if (h != NULL && h->next == NULL)
{
puts("Yes");
}
else
{
puts("No");
}
Destroy(&h);
return 0;
}
说明:Create 函数用于创建链表,Destroy 函数用于销毁链表。Input 函数用于输入链表:首先输入结点数,然后输入这些数据元素。
样例输入
5
16 25 36 47 64
样例输出
Yes
void Clear(NODE *head)
{
NODE *p = head;
while (p != NULL)
{
if(p->next==NULL)
{
break;
}
NODE *temp = p->next;//暂存p的后继指针
p->next=p->next->next;
free(temp);//释放内存,避免内存泄漏
}
}