PTA 6-17 加头链表的插入和删除

本题要求实现两个函数,可在加监督元单链表中进行插入和删除操作。
插入操作完成后要求链表仍然有序。
删除操作时,如链表中无此元素x,输出:no x。
最后都需要输出链表中所有元素值。

函数接口定义:

void ins(ptr h,int x);
void del(ptr h,int x);

其中 ins 完成在链表h中将元素x插入到表中, del 完成在甸表h中完成删除元素x的操作。

裁判测试程序样例:

#include <stdio.h>
#include <malloc.h>
typedef struct node
{
    int data;
    struct node *next;
}snode,*ptr;

void output(ptr h)//输出链表中的元素值
{
    ptr p;
    p=h;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}

int main()
{
    ptr head,last;
    int x,y,i;
    head=last=(ptr)malloc(sizeof(snode));//链表初始化
    last->next=NULL;//构造带监督元的单链表
    for(i=1;i<4;i++)
        ins(head,3*i);//在链表中先插入3个元素3,6,9
    scanf("%d",&x);
    if(x==1)
    {
        scanf("%d",&y);//输入插入元素值
        ins(head,y);
    }
    else if(x==2)
    {
        scanf("%d",&y);//输入删除元素值
        del(head,y);
    }
    printf("list is:");
    output(head->next);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

输入两个元素a,b,a=1表示做插入操作,b为插入元素。输出链表中所有元素。若a=2表示做删除操作,b为需删除元素。如无此元素,输出no b,换行后输出链表中所有元素值

1 7

输出样例:

list is:3 6 7 9 

 代码实现:

void ins(ptr h, int x) {  
    ptr p = h, q;
    while (p->next != NULL && p->next->data < x) {  
        p = p->next;  
    }  
    q = (ptr)malloc(sizeof(snode));  
    q->data = x;  
    q->next = p->next;  
    p->next = q;  
}  
void del(ptr h, int x) {  
    ptr p = h, q;  
    while (p->next != NULL && p->next->data != x) {  
        p = p->next;  
    }  
    if (p->next != NULL) {  
        q = p->next;  
        p->next = q->next;  
        free(q);
    } else {  
        printf("no %d\n", x);  
    }  
}  //EZZ

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值