6-42 构造有序链表c

本题实现链表的有序构造,输出表中所有元素。

函数接口定义:

 
函数接口: 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 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

答案区:

ptr creat()
{
    snode *head=NULL,*n=NULL;
    snode *q;
    while(1)
    {
        n=(snode *)malloc(sizeof(snode));
        scanf("%d",&n->data);
        if(n->data==0)break;
        if(head==NULL)                     //添加第一个元素
        {
            head=n;
            n->next=NULL;
        }
        else
        {
            if(n->data<head->data)       //开头
            {
                n->next=head;
                head=n;
            }
            else
            {
                
                for(q=head;;q=q->next)
                {
                    if(q->next!=NULL)
                    {
                      if(q->next->data>n->data)
                      {
                         n->next=q->next;
                         q->next=n;
                         break;
                      }
                    }
                    else
                    {
                       q->next=n;
                        n->next=NULL;
                        break;
                    }
                   
                
               
                }
            }
            
            
        }
    }
    return head;
}
void output(ptr p)
{
    snode *q;
    q=p;
    while(q!=NULL)
    {
        
        printf("%d ",q->data);
        q=q->next;
    }
    return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值