单链表结点元素值的排序
【问题描述】建立一个单链表,并使用冒泡排序法对各结点的元素值进行从小到大的排序
【输入形式】序列元素个数
待排序列
【输出形式】排序后的结果
【样例输入】
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;
}