西南科技大学OJ题 双向链表的操作问题0960

双向链表的操作问题

建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。)

输入

第一行:双向表的长度; 
第二行:链表中的数据元素。

输出

输出双向链表中的数据元素的值。

样例输入

10
2 4 6 3 5 8 10 21 12 9

样例输出

2 3 4 5 6 8 9 10 12 21

#include<stdio.h>
#include<malloc.h>
struct DLinkNode
{
    int data;
    struct DLinkNode *prior;
    struct DLinkNode *next;
 };

void CreateList(struct DLinkNode *&head,int n)
{
    struct DLinkNode *p1,*p2;
    head=p1=p2=(struct DLinkNode*)malloc(sizeof(DLinkNode));
    scanf("%d",&p1->data);
    p1->prior=NULL;
    for(int i=1;i<n;i++)
    {
        p2=(struct DLinkNode*)malloc(sizeof(DLinkNode));
        p1->next=p2;
        p2->prior=p1;
        p1=p2;
        scanf("%d",&p1->data);
    }
    p1->next=NULL;
}
int main()
{
    int n;
    struct DLinkNode *head,*p;
    scanf("%d",&n);
    CreateList(head,n);
    for(int i=0;i<n;i++)
    {
        p=head;
        while(p->next!=NULL)
        {
            if(p->data>p->next->data)
            {
                int k=p->data;
                p->data=p->next->data;
                p->next->data=k;
            }
            p=p->next;
        }
        
    }
    p=head;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}


/* 
#include<stdio.h>
int main()
{
    int n,a[100];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
        {
            if(a[j]>a[j+1])
            {
                int k=a[j];
                a[j]=a[j+1];
                a[j+1]=k;
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
}
*/ 

猜你喜欢

转载自blog.csdn.net/qq_40593308/article/details/82559893
今日推荐