链表操作函数

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

typedef struct ListNode
{
    int data;
    struct ListNode *next;
}ListNode;

ListNode *ReverseList(ListNode *list)
{
    ListNode *p, *q;
    p = list->next;
    list->next = NULL;
    while (p != NULL)
    {
        q = p->next;
        p->next = list->next;
        list->next = p;
        p = q;
    }
    return list;
}

ListNode *DeleteNode(ListNode *list, int min, int max)
{
    ListNode *p = list->next, *q = list;
    while (p != NULL)
    {
        if (p->data>min && p->data<max)
        {
            q->next = p->next;
            free(p);
            p = q;
          }
          else
              q = q->next;
          p = p->next;
     }
     return list;
}

void TraverseList(ListNode *list)
{
    ListNode *itr = list->next;
     while (itr != NULL)
    {
        printf("%d ", itr->data);
        itr = itr->next;
    }
    printf("\n");
}

void FreeList(ListNode *list)
{
    ListNode *itr = list, *t;
    while (itr != NULL)
    {
        t = itr->next;
        free(itr);
        itr = t;
     }
}

ListNode *CreateList()
{
    ListNode *head, *p;
    int num;
    head = (ListNode *)malloc(sizeof(ListNode));
    head->data = 0;
    head->next = NULL;
    scanf("%d", &num);
    while (num != -1)
    {
        p = (ListNode *)malloc(sizeof(ListNode));
        p->data = num;
        p->next = head->next;
        head->next = p;
        scanf("%d", &num);
    }
    return head;
}

int main()
{
    ListNode *list;
    int min, max;
    
    printf("input data (end: -1): ");
    list = CreateList();
    TraverseList(list);
    
    printf("min: ");
    scanf("%d", &min);
    printf("max: ");
    scanf("%d", &max);
    list = DeleteNode(list, min, max);
    TraverseList(list);
    
    FreeList(list);

    return 0;
}

你可能感兴趣的:(链表操作函数)