双向链表的操作问题
建立一个长度为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]);
}
}
*/