#include <iostream> using namespace std; struct elem { elem() { value = 0; next = NULL; } int value; elem * next; }; struct node { node() { head = tail = NULL; } elem* head; elem* tail; }; int compare_node(elem* elem_1, elem* elem_2) { if(elem_1->value < elem_2->value) { return -1; } else if(elem_1->value == elem_2->value) { return 0; } else { return 1; } } /* 对链式结构进行归并排序, 输入是待排序链表表头,返回值是排序后的表头指针 sort_type = -1: 升序, 1:降序 */ elem* sort_list(elem *phead, int sort_type) { elem* head_1 = NULL; elem* head_2 = NULL; elem* tail_1 = NULL; elem* tail_2 = NULL; elem* new_head = NULL; if(phead == NULL || phead->next == NULL) // list size is 0 or 1 { return phead; } int index = 0; tail_1 = NULL; tail_2 = phead; for(; tail_2; tail_2 = tail_2->next) { if(index % 2