删除有序单链表中值大于x而不大于y的结点

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define FLAG -1    //停止输入的标志
typedef struct Node
{
    int data;
    struct Node * next;
}LNode,*LinkList;

void CreateLinkList(LinkList L);
void show_List(LinkList L);
void DelLink(LinkList L,int x,int y);//前提是单链表有序!

void main()
{
    LinkList L;
    L = (LinkList)malloc(sizeof(LNode));//创建头结点
    printf("创建单链表:\n");
    CreateLinkList(L);//假设单链表从1-8
    printf("遍历单链表:\n");
    show_List(L);
    printf("删除指定区间后的单链表:\n");
    DelLink(L,4,7);
    show_List(L);
}

void CreateLinkList(LinkList L)  //尾插法  输出是输入的正序
{
    LinkList s,r;
    int x;
    scanf("%d",&x);
    r = L;
    while(x != FLAG)
    {
        s = (LNode *)malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        scanf("%d",&x);
    }
    r->next = NULL;
}

void show_List(LinkList L)
{
    LinkList p = L->next;
    printf("%d",p->data);
    p = p ->next;
    while(p != NULL)
    {
        printf("->%d",p->data);
        p = p->next;
    }
    printf("\n");
}

void DelLink(LinkList L,int x,int y)
{
    LinkList p,q,s;
    p = L->next;
    while((p != NULL) && (p->data <= x))
    {
        q = p;
        p = p->next;
    }
    while((p != NULL) && (p->data <= y))
    {
        s = p;
        p = p->next;
        //删除结点
        //q->next = p;
        free(s);
    }
    q->next = p; //
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐