求解,如何用链表实现冒泡排序?链表里面的数据交换如何实现?

#include
using namespace std;
struct ListNode
{
int num;
ListNode *next;
};

ListNode *create(int n)
{ListNode *p,*tail=0,*head=0;
for(int j=0;j {p=new ListNode;cin>>p->num;
p->next=0;
if(head==0)head=p;
else tail->next=p;
tail=p;
}
return head;
}

void Bubble_sort(int n)
{ListNode *now=0,*ne=0,*tail=0,*head=0;
int temp;
head=tail=create(n);
for(int i=1;i {tail=head;
for(int j=1;j {now=tail;
ne=tail->next;
if((now->num)>(ne->num))
{
temp=(now->num);
(now->num)=(ne->num);
(ne->num)=temp;
tail=tail->next;
}
}
}
tail=head;
for(int k=0;k {
coutnum<<' ';
tail=tail->next;
}
}
int main()
{
int leng;
cin>>leng;
Bubble_sort(leng);

}

两个错误:
1.内存j循环for(int j=1;j<=n-i;n++)应该是for(int j=1;j<=n-i;j++)
2.tail=tail->next;应该放到if外面,而不是if里面

 #include<iostream>
using namespace std;
struct ListNode
{
    int num;
    ListNode *next;
};

ListNode *create(int n)
{
    ListNode *p,*tail=0,*head=0;
    for(int j=0;j<n;j++)
    {
        p=new ListNode;
        cin>>p->num;
        p->next=0;
        if(head==0)
            head=p;
        else 
            tail->next=p;
        tail=p;
    }
    return head;
}


void Bubble_sort(int n)
{
    ListNode *now=0,*ne=0,*tail=0,*head=0;
    int temp;
    head=tail=create(n);
    for(int i=1;i<n;i++)
    {
        tail=head;
        for(int j=1;j<=n-i;j++)
        {
            now=tail;
            ne=tail->next;
            if((now->num)>(ne->num))
            {
                temp=(now->num);
                (now->num)=(ne->num);
                (ne->num)=temp;
            }
            tail=tail->next;
        }
    }
    tail=head;
    for(int k=0;k<n;k++)
    {
        cout<<tail->num<<' ';
        tail=tail->next;
    }
}
int main()
{
    int leng;
    cin>>leng;
    Bubble_sort(leng);

}

图片说明