1.链表节点的插入排序(写了个插入排序,但是报段错误,自己编译器里能运行)
#include <iostream>
#include <stdlib.h>
#include <cstring>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *insertionSortList(ListNode *head) {
ListNode *h=new ListNode(0);
h->next=head;
ListNode *cur=NULL,*maxptr;
int max;
while(h->next!=NULL){ //每次选出最大的一个加入到cur中
max=-1111111;
ListNode *p=h;
while(p->next!=NULL){
if(p->next->val>max){
max=p->next->val;
maxptr=p;
}
p=p->next;
}
ListNode *tmp=maxptr->next;
maxptr->next=tmp->next;
tmp->next=cur;
cur=tmp;
}
delete h;
h=NULL;
return cur;
}
int main() {
int i=15,j=2;
ListNode *p=NULL;
while(i--){
ListNode *h=new ListNode(rand()%50);
h->next=p;
p=h;
}
ListNode *t=p;
while(t){
cout<<t->val<<endl;
t=t->next;
}
cout<<endl;
t=insertionSortList(p); //排序
while(t){
cout<<t->val<<endl;
t=t->next;
}
return 0;
}