你交换的只是p1和p2,p没有动(也就是说前一个没修改)
也就是说,假设链表为(pa是头)
pa->pb->pc->pd
p1 == pb
p2 == pc
p3 == pc
交换pb和pc
则循环结束后
pa->next == pb
pb->next == pd
pc->next == pb
p1 == pc
p2 == pb
p3 == pc
if(p1!=p3)p0->next=p1; (永远不会执行)
p0 == pc
最终链表:
pa->pb->pd
也就是说pc没了,代表的意思就是,比较的两个元素,如果发生交换,会丢失比较小的那个。
修改:交换时必须同时改正上一个元素的指针
P0是什么,什么地方定义的?还有是升序还是降序也没说明,链表冒泡排序一趟只能把最大值或最小值排在链表尾,所以你的算法逻辑不对,最好是用顺序表!