【数据结构-链表】将链表ha中结点值大于min小于max的结点删除,接到另一个结点后面构造成单向递增有序链表

【将链表ha中结点值大于min小于max的结点删除,接到另一个结点后面构造成单向递增有序链表】

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

typedef struct linkednode        // 链表结点类型
{
    int data;
    struct linkednode * next;
}snode,*ptr;

ptr creatlink()    // 向前插入法
{
    ptr head,p;
    head = NULL;
    int x;
    scanf("%d",&x);
    while(x!=1000)
    {
        p = (ptr)malloc(sizeof(snode));
        p->data = x;
        p->next = head;
        head = p;
        scanf("%d",&x);
    }
    return (head);
}

ptr spilt(ptr ha,int min,int max)       // 将 min<结点值<max的结点从链表删除,将这些结点单独做成一个带表头监督元的结点的单项递增有序链表
{
    ptr hb,p,q,s;
    hb = (ptr)malloc(sizeof(snode));
    hb->next = NULL;
    q = NULL;
    s = ha;
    while(s != NULL)        // 如果有要删除的结点,那么p在要删除的结点之后,s正好指向第一个要删除的结点
        if(s->data <= min){p = s;s = s->next}
        else break;
    if(s == NULL)
        return hb;
    while(s != NULL)        // 将q指向要删除的最后一个结点,s指向该结点后继结点
        if(s->data < max){q = s;s = s->next}
        else break;
    if(q == NULL)
        return hb;
    q->next = NULL;         // 将最后一个结点置空
    hb->next = p->next;     // 将头结点与剩余删除的结点连接起来 构造hb链表
    p->next = s;            // 将该删除结点从链表ha中删除
    return hb;
}

int main()
{
    ptr ha,hb,p1,p2;
    ha = creatlink();
    p1 = ha;
    while(p1!=NULL)
    {
        printf("%d ",p1->data);
        p1 = p1->next;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值