单链表冒泡排序(交换节点)

代码如下:

#include<iostream>
#include<cstdlib>
using namespace std;
int num;
typedef struct list
{
    int data;
    struct list *next;
}Lnode,*linklist;
linklist Createlist(int n)//构建带头结点的链表
{
    linklist p, head,tail;
    head = (linklist)malloc(sizeof(Lnode));
    tail = NULL;
    head->next = tail;
    for (int i = 0; i < n; i++)
    {
        p = (linklist)malloc(sizeof(Lnode));
        cin >>p-> data;
        p->next = NULL;
        if (tail == NULL)
            head->next = p;
        else
            tail->next = p;
        tail=p;
    }
    return head;//返回头结点的地址
}
void sortlist(linklist head)//对链表进行bubble sort
{
    linklist pre, p,tail;
    tail = NULL;
    while (head->next != tail)
    {
        pre = head;
        p = head->next;
        while (p->next!=tail)
        {
            if (p->data > p->next->data)
            {
                pre->next = p->next;
                p->next = pre->next->next;
                pre->next->next = p;
            }
            else
                p = p->next;
            pre = pre->next;
        }
        tail = p;
    }
}
int main()
{
    cin >> num;
    linklist head,x;
    head = Createlist(num);
    sortlist(head);
    x = head->next;
    while (x != NULL) 
    {
        cout << x->data;
        x = x->next;
    }
    cout << endl;
    return 0;
}

 

posted @ 2017-07-24 10:30  Zireael  阅读(3092)  评论(0编辑  收藏  举报