数据结构C语言实现----销毁链表

 

 

1.首先,将*list(头指针)赋值给p,这样p也指向链表的第一个结点,成为链表的表头

2.然后判断只要p不为空,就将p指向下一个的指针赋值给q,再释放掉p

3.之后再将q赋值给p,用来找到下一轮释放掉的结点的下一个结点

 

代码如下:

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
    char date;
    struct Node *next;
}Node , *LinkList;
//创建链表
LinkList creat_linklist(int n)
{
    LinkList New_node,Tail_node;
    LinkList Head_node = NULL;
    char c;

    for (size_t i = 0; i < n; i++)
    {
        printf("请输入在第%d个结点存入的数据:",i+1);
        scanf("%c",&c);
        fflush(stdin);
        New_node = (LinkList)malloc( sizeof(Node) );
        New_node->date = c;
        New_node->next = NULL;

        if (Head_node == NULL)
        {
            Head_node = New_node;
        }else
        {
            Tail_node->next = New_node;
        }
        Tail_node = New_node;
    }
    return Head_node;
}
//销毁链表
void destoryLinkList(LinkList *List)
{
    LinkList p,q;
    p = *List;
    while (p)
    {
        q = p->next;
        free(p);
        p = q;
    }
    *List = NULL;
}
int main()
{
    int n;
    char c;
    LinkList List , List2;
    //List用于第一次打印单链表,List2用于第二次打印单链表
    printf("请输入结点个数:");
    scanf("%d",&n);
    fflush(stdin);
    List = creat_linklist(n);
    List2 = List;//复制一遍链表,第一次打印链表后链表后头指针会直接指向NULL,导致第二次打印失败
    printf("打印单链表:");
    while ( List != NULL )
    {
        printf("%c" , List->date);
        List = List->next;
    }
    putchar('\n');
    printf("即将销毁链表,请按任意键确认!");
    getchar();
    destoryLinkList(&List2);
    if (List2 == NULL)
    {
        printf("链表已被销毁!");
    }else
    {
        while ( List2 != NULL )
        {
            printf("%c" , List2->date);
            List2 = List2->next;
        }
    }
    return 0;
}

  

运行结果:

 

posted @ 2020-07-15 16:32  骑码的佳俊  阅读(2723)  评论(0编辑  收藏  举报