天天看点

单链表的销毁

(1)无头单链表销毁(尾插):

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

typedef struct person
{
    int age;
    struct person *next;
}per;

void tail_list(per **one, int num)
{
    per *temp = (per *)malloc(sizeof(per));

    temp->age = num;
    temp->next = NULL;
    while((*one))
    {
        one = &((*one)->next);
    }
    *one = temp;
}

void show(per *head)
{
    if(NULL == head)
    {
        return;
    }
    while(head)
    {
        printf("age is %d\n",head->age);
        head = head->next;
    }
}

void destory(per **head)
{
    per *curr = *head;
    per *past = *head;

    while(past)
    {
        curr = past;
        past = past->next;
        free(curr);
        curr = NULL;
    }
    *head = NULL;
}

int main()
{
    per *head = NULL;

    tail_list(&head,10);
    tail_list(&head,20);
    tail_list(&head,30);
    tail_list(&head,40);
    tail_list(&head,50);
    tail_list(&head,60);
    
    show(head);
    printf("=======after destory========\n");
    destory(&head);
    show(head);

    return 0;
}
           

(2)有头单链表销毁(头插):

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

typedef struct person
{
    int age;
    struct person *next;
}per;

per *head_list(per *one, int num)
{
    per *temp = (per *)malloc(sizeof(per));

    temp->age = num;
    per *head = one->next;
    one->next = temp;
    temp->next = head;

    return head;
}

void show(per *head)
{
    if(NULL == head->next)
    {
        return;
    }
    while(head->next)
    {
        printf("age is %d\n",head->next->age);
        head = head->next;
    }
}

void destory(per *head)
{
    per *curr = head->next;
    while(curr)
    {
        head->next = curr->next;
        free(curr);
        curr = head->next;
    }
}

int main()
{
    per head;
    head.next = NULL;

    head_list(&head,10);
    head_list(&head,20);
    head_list(&head,30);
    head_list(&head,40);
    head_list(&head,50);

    show(&head);
    printf("=======after destoryy======\n");
    destory(&head);
    show(&head);

    return 0;
}
           

继续阅读