单链表结点元素值的排序

单链表结点元素值的排序
【问题描述】建立一个单链表,并使用冒泡排序法对各结点的元素值进行从小到大的排序

【输入形式】序列元素个数

                      待排序列
【输出形式】排序后的结果
【样例输入】

6

18 6 55 28 93 46

【样例输出】                


6 18 28  46 55 93

#include <iostream>
using namespace std;

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

node*create(int n)
{
    node*head=new node;
    node*pre=head;//前一个节点
    node*p;//现在节点
    for(int i=0;i<n;i++)
    {
        p=new node;//开辟新节点空间
        cin>>p->data;//初始化新节点数据
        p->next=NULL;//定义尾指针
        pre->next=p;//构建前一节点和现在节点关系
        pre=p;//迭代,现节点变为前一节点
    }
    return head;
}

void print(node* head)
{
    //要打印节点数据,需要遍历节点
    for(node*p=head->next;p;p=p->next)//p从1节点开始
        //head->next指的就是1节点,最后执行完最后一个节点之后才到达p=NULL,从而停止执行
    {
        cout<<p->data<<" ";
    }
}

void sort(node* head)
{
    node*cur;
    node*tail=NULL;
    for(node*p=head->next;p;p=p->next)//上层遍历链表,控制
    {
        for(cur=head->next;cur->next!=tail;cur=cur->next)//下层遍历链表,尾指针需要更新,此为冒泡排序思想,已经排过的无需再排
        {
            if(cur->data>cur->next->data)//升序排列
            {
                int tmp;
                tmp=cur->data;
                cur->data=cur->next->data;
                cur->next->data=tmp;
            }
        }
        tail=cur;//更新尾指针
    }
}

int main()
{
    int n;
    cin>>n;
    node* head=create(n);
    sort(head);
    print(head);
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值