#include<iostream>
using namespace std;
struct node{
int data;
node *next;
};
node *create(node *p);
void buble(node *head,node *end);
void show(node *head);
int main(){
cout<<"please enter the number,while cin>>0,end;"<<endl;
node *head=0,*end=0;
head=create(head);
buble(head,end);
cout<<"Now the new Listnode is:"<<endl;
show(head);
return 0;
}
node *create(node *p){
int num;
cin>>num;
if(num==0)return 0;
p=new node;
p->data=num;
p->next=create(p);
return p;
}
void buble(node *p,node *end){
node *q,*head;
head=p;
int x;
if(p==end)return ;
while(p->next!=0&&p->next!=end){
q=p->next;
if(p->data>q->data){
x=p->data;
p->data=q->data;
q->data=x;
}
p=p->next;
}
end=p;
buble(head,end);
}
void show(node *head){
while(head){
cout<<head->data<<" ";
head=head->next;
}
}
用递归实现对链表的排序,其思想是用一个end指针来表示链表的结束点,当第一次冒泡排序后就将最后一个节点的指针赋给end,然后递归调用排序,当p->nextend的时候表示这一次排序结束,一直递归,直到endhead。