Problem Description
输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表。
Input
第一行输入整数个数N;
第二行输入N个无序的整数。Output
依次输出有序链表的结点值。
Sample Input
6 33 6 22 9 44 5Sample Output
5 6 9 22 33 44Hint
不得使用数组!
Source
//有序链表的建立 /***************************** 基本思路是一个数一个数把它存在 链表中新来的数链表中已有数进行 比较如果大于链表中的数就往后移 动如果小于就在这个数前插入。 ******************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct node { int data ; struct node *next ; }NODE ; NODE *creat(int n) { NODE *head , *tail , *p ,*q ,*t; head = (NODE*)malloc(sizeof(NODE)) ; head ->next = NULL ; tail = head ; p = (NODE*)malloc(sizeof(NODE)) ; p->next = NULL ; scanf("%d",&p->data) ; tail->next = p ; tail = p ; int i ; for(i= 1 ;i<n ;i++){ t= head ; int flag = 1; q = head ->next ; p= (NODE*)malloc(sizeof(NODE)) ; scanf("%d",&p->data) ; p->next = NULL ; while(q){ if(p->data<q->data){ p->next = q ; t->next = p ; flag =0 ; break ; } else { q=q->next ; t = t->next ; } } if(flag){ tail ->next = p ; tail = p ; } } return head ; } void show(NODE*head) { NODE *p ; p = head ->next ; while(p){ if(p->next == NULL ) { printf("%d\n",p->data) ; } else printf("%d ",p->data) ; p = p->next ; } } int main() { NODE *head ; int n ; scanf("%d",&n ) ; head = creat(n) ; show(head) ; return 0 ; }
03-16