C++编程 急急急 对链表里面的数据从大到小排序

2025-03-13 04:23:07
推荐回答(1个)
回答1:

typedef struct Data{
int money;
struct Data *next;
}DATA;
// 实现链表的排序函数(这里是一个单向链表的排序实现)
DATA* test(DATA* head){
DATA *pi;
DATA *pj;
DATA *prev_i=NULL;
DATA *prev_j=NULL;
int count=0; // 如果count=0,就是链表头部与其他元素交换,否则就是内部元素之间进行交换

// 冒泡进行链表排序(由大到小)
for(pi=head;pi;pi=pi->next){
prev_j = NULL;
for(pj=pi; pj; pj=pj->next){
if(pi->money < pj->money){
if(count >0){
prev_i->next = pj;
}
DATA *p1 = pi;
DATA *p2 = pj;
if(pi->next == pj){ // 两个元素之间相邻的
// 进行交换
DATA *tmp = p1;
p1->next = p2->next;
p2->next = p1;
}else{ // 两个元素之间不相邻的
// 进行交换
prev_j->next = p1;
DATA *tmp = p1->next;
p1->next = p2->next;
p2->next = tmp;
}
// 保持pi,pj指向的链表对应下标位置不变
pi = p2;
pj = p1;
// 让头指针指向包含money值最小的元素
if(count == 0){
head = pi;
}
}
prev_j = pj; // 指向pj指向的前一个元素
}
count++;
prev_i = pi; // 指向pi的前一个元素
}
// 打印验证
return head;
}