#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>  
#include<stdlib.h>  
#define LEN sizeof(struct Node)
struct Node
{
    int data;
    struct Node *next;
};
typedef struct Node *PtrToNode;
typedef PtrToNode List;//
typedef PtrToNode Position;//位置

List CreateTable(int n,Position head);//建立顺序表
void PrintTable(Position head);//遍历链表
Position Delete(Position head, int mink, int maxk);//删除表中所有值大于mink且小于maxk的元素

List CreateTable(int n,Position head)
{
    int i;
    Position p1, p2, p3;
    for (i = 0; i<n; i++)
    {
        p1 = (Position)malloc(LEN);
        printf("请输入元素:");
        scanf("%d", &p1->data);
        p1->next = NULL;
        p2 = head;
        p3 = head->next;
        while (p3 != NULL&&p1->data>p3->data)
        {
            p3 = p3->next;
            p2 = p2->next;
        }
        p1->next = p3;
        p2->next = p1;
    }
    return(head);
}

void PrintTable(Position head)
{
    Position p;
    p = head->next;
    while (p->next != NULL)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("%d\n", p->data);
}


Position Delete(Position head, int mink, int maxk)
{
    Position tail;
    tail = head;
    while (head->next)
    {
        if (head->next->data > mink && head->next->data < maxk)
        {
            head->next = head->next->next;
        }
        else
            head = head->next;
    }
    return tail;

}

int main()
{
    int n;
    int mink, maxk;
    Position head;
    head = (Position)malloc(LEN);
    head->next = NULL;
    printf("请输入链表长度:");
    scanf("%d", &n);
    CreateTable(n,head);
    PrintTable(head);
    printf("请输入删除范围:\n");
    printf("下限:\n");
    scanf("%d", &mink);
    printf("上限:\n");
    scanf("%d", &maxk);
    head = Delete(head, mink, maxk);
    PrintTable(head);

}