题目描述
建立一个长度为n的带头结点的双向链表,使得该链表中的数据元素递增有序排列。(必须使用双向链表完成,数据类型为整型。)
输入
第一行:双向表的长度; 第二行:链表中的数据元素。输出
输出双向链表中的数据元素的值。样例输入
10 2 4 6 3 5 8 10 21 12 9样例输出复制
2 3 4 5 6 8 9 10 12 21#include<iostream> #include<malloc.h> #include<cstring> using namespace std; #define INF 0x3f3f3f3f #define MAX(x,y) (x>y?x:y) #define MIN(x,y) (x>y?y:x) #define M 1000 typedef struct LNode { int data; struct LNode*next; struct LNode*prior; }LNode; void initLNode(LNode*&L) { L=(LNode*)malloc(sizeof(LNode)); L->next=NULL; L->prior=NULL; } void createLNode(LNode*&L,int n) { LNode*temp=L; for(int i=0;i<n;i++) { LNode*p=(LNode*)malloc(sizeof(LNode)); cin>>p->data; p->next=NULL; temp->next=p; p->prior=temp; temp=p; } } void sortLNode(LNode*&L) { LNode*p,*f,*r; p=L; while(p->next) { p=p->next; } r=p; f=L->next; while(1) { if(f!=r) { for(p=f;p!=r;p=p->next) { if(p->data>p->next->data) { int t=p->data; p->data=p->next->data; p->next->data=t; } } r=r->prior; } else { break; } } } void outLNode(LNode*L) { LNode*temp=L; while(temp->next) { temp=temp->next; cout<<temp->data<<" "; } } int main() { LNode*L; initLNode(L); int n; cin>>n; createLNode(L,n); sortLNode(L); outLNode(L); return 0; }
SWUST OJ960: 双向链表的操作问题
最新推荐文章于 2022-04-19 17:14:41 发布