資料結構實驗之連結串列六:有序連結串列的建立

HowieLee59發表於2019-03-11

Problem Description

輸入N個無序的整數,建立一個有序連結串列,連結串列中的結點按照數值非降序排列,輸出該有序連結串列。

Input

第一行輸入整數個數N;
第二行輸入N個無序的整數。

Output

依次輸出有序連結串列的結點值。

Sample Input

6
33 6 22 9 44 5

Sample Output

5 6 9 22 33 44

Hint

不得使用陣列!

 

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

typedef struct Node{
    int data;
    struct Node *next;
}node;

void create(node * &head,int m){
    node *p,*tail;
    head = new Node;
    head->next = NULL;
    tail = head;
    for(int i = 0 ; i < m ; i++){
        p = new Node;
        scanf("%d",&p->data);
        p->next = NULL;
        tail->next = p;
        tail = p;
    }
}

void sort(node * &head){
    node *cur,*p;
    int temp;
    for(cur = head->next;cur != NULL;cur = cur->next){
        for(p = cur->next;p != NULL;p = p->next){
            if(cur->data > p->data){
                temp = cur->data;
                cur->data = p->data;
                p->data = temp;
            }
        }
    }
}

void print(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);
    create(head,n);
    sort(head);
    print(head);
    return 0;
}

 

相關文章