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

Posted Farewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表冒泡排序(交换节点)相关的知识,希望对你有一定的参考价值。

代码如下:

#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;
}

 

以上是关于单链表冒泡排序(交换节点)的主要内容,如果未能解决你的问题,请参考以下文章

在java中使用单链表和冒泡排序进行编码

单链表的冒泡排序

不使用交换的单链表中的选择排序

同时创建两条单链表,头插法插入节点,遍历,查找,删除,求长度,冒泡排序,反转,2条有序链表链接成一条链表后依然有序

经典算法学习——非循环双向链表实现冒泡排序(不带头结点)

单链表 --- 冒泡排序 约瑟夫环