数据结构实验之链表六:有序链表的建立

来源:互联网 发布:知象 编辑:程序博客网 时间:2024/04/30 16:54
            
I - 数据结构实验之链表六:有序链表的建立
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu
Submit Status Practice SDUTOJ 2121

Description

输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。

Input

第一行输入整数个数N; 
第二行输入N个无序的整数。

Output

依次输出有序链表的结点值。

Sample Input

633 6 22 9 44 5

Sample Output

5 6 9 22 33 44

Hint

不得使用数组!
这是我刚学会敲的!!!
#include <stdio.h>#include <stdlib.h>struct node{    int data;    node *next;}*head,*p,*t,*q;int main(){    int n,i,x;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    scanf("%d",&n);    for(i=1; i<=n; i++)    {        if(i==1)        {            scanf("%d",&x);            p=(struct node*)malloc(sizeof(struct node));            p->data=x;            p->next=NULL;            head->next=p;        }        else if(i==2)        {            scanf("%d",&x);            if(x>head->next->data)            {                p=(struct node*)malloc(sizeof(struct node));                p->data=x;                p->next=NULL;                head->next->next=p;            }            else            {                p=(struct node*)malloc(sizeof(struct node));                p->data=x;                p->next=head->next;                head->next=p;            }        }        else        {            scanf("%d",&x);                        //当时居然傻到忘了输入了!!!            if(x<head->next->data)            {                p=(struct node*)malloc(sizeof(struct node));                p->data=x;                p->next=head->next;                head->next=p;            }            else            {                t=head->next;                      //每次都要从head->next开始,如果这个是在for循环外的话,那么当输入下一个数字n时,t指向的是空                while(1)                {                    if(t->next==NULL)            //要先判断t下一个是不是为空,如果不为空才可以进行下一个数值的比较                    {                        p=(struct node*)malloc(sizeof(struct node));                        p->data=x;                        p->next=NULL;                        t->next=p;                        break;                    }                    else if(x>t->data&&x<t->next->data)                    {                        p=(struct node*)malloc(sizeof(struct node));                        p->data=x;                        p->next=t->next;                        t->next=p;                        break;                    }                    t=t->next;                }            }        }    }    p=head->next;    while(p)    {        printf("%d",p->data);        p=p->next;        if(p)            printf(" ");    }    printf("\n");}这个是看完大神代码理解后又敲的一遍,看完顿时感觉自己的之前办法好笨重啊!!!
<pre class="cpp" name="code">#include <stdio.h>#include <stdlib.h>struct node{    int data;    node *next;}*head,*p,*r,*q;int main(){    int n,x;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    scanf("%d",&n);    while(n--)    {        scanf("%d",&x);        r=(struct node*)malloc(sizeof(struct node));        r->data=x;                  //每输入一个数先放到一个空间里        p=head->next;               //p指向下一个节点        q=head;                      q记录p的前一个节点        while(p)        {            if(r->data<p->data)            {                r->next=p;                q->next=r;                break;            }            q=p;            p=p->next;        }        if(!p)        {            q->next=r;            r->next=NULL;        }    }    p=head->next;    while(p)    {        printf("%d",p->data);        p=p->next;        if(p)        printf(" ");    }    printf("\n");}


0 0