PTA 6-16构造有序链表

本题实现链表的有序构造(建议使用加监督元链表实现),输出表中所有元素。

函数接口定义:

ptr  creat( );//构造链表
void output(ptr p);//输出链表元素

其中 p 是用户传入的参数。creat函数返回链表的头指针,输入在creat函数中输入,以0表示输入结束。output函数输出链表元素,以一个空格隔开

裁判测试程序样例:

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

ptr  creat( );//构造链表
void output(ptr p);//输出链表元素

int main()
{
    ptr head;
    head=creat();
    output(head);
    return 0;
}

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

输入样例:

2 1 3 0

输出样例:

1 2 3 

代码实现:

ptr creat() {  
    ptr q = NULL, head = NULL, val = NULL;  
    int x;  
    scanf("%d", &x);  
    while (x != 0) {  
        val = (ptr)malloc(sizeof(snode));  
        val->data = x;  
        val->next = NULL;  
  
        if (head == NULL) {  
            head = val;  
            q = head;  
        } else {  
            ptr prev = NULL;  
            q = head;  
            while (q != NULL && q->data < x) {  
                prev = q;  
                q = q->next;  
            }  
            if (prev == NULL) {  
                // 新节点是头节点  要放在头结点的位置,他最小
                val->next = head;  //表头插入法
                head = val;  
            } else {  
                // 在 prev 和 q 之间插入新节点  
                val->next = q;  
                prev->next = val;  
            }  
        }  
        scanf("%d", &x);  
    }  
    return head;  
}  
  
void output(ptr p) {  
    while (p != NULL) {  
        printf("%d ", p->data);  
        p = p->next;  
    }  
    printf("\n"); 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值