有哪里不对的请指正
#include<iostream> using namespace std; struct listNode { int value; listNode *next; listNode() { next = NULL; } }; class myList { private: listNode* head; listNode* tail; public: myList() { head = NULL; tail = NULL; } void insert(listNode *node) { if(head == NULL) { head = node; tail = node; } else { tail->next = node; tail = node; } } void insert(int i) { listNode *new_node = new listNode(); new_node->value = i; if(head == NULL) { head = new_node; tail = new_node; } else { tail->next = new_node; tail = new_node; } } listNode* get_head() { return head; } void print() { listNode *temp = head; while(temp != NULL) { cout << temp->value << " "; temp = temp->next; } cout << endl; } void reversal()//reverse the list { listNode* before = NULL; listNode *current = head; listNode *temp = head; while(current != NULL) { listNode* next = current->next; current->next = before; before = current; current = next; } head = tail; tail = temp; } void reorder()//12345 重排序为15243 { listNode* current = head; while(true) { listNode* next = current->next; listNode* findTheEnd = next; listNode* tempPre = findTheEnd; if( next == NULL||next->next == NULL )break; while(findTheEnd->next != NULL) { tempPre = findTheEnd; findTheEnd = findTheEnd->next; } tempPre->next = NULL; current->next = findTheEnd; findTheEnd->next = next; current = next; next = next->next; } } listNode* find_mid() { listNode* first = head; listNode* second = head; while(second != NULL) { second = second->next; if(second != NULL) { first = first->next; second = second->next; } } return first; } bool judge_circle() { listNode* first = head, *second = head; if(head == NULL) return false; do { second = second->next; if(second != NULL) { first = first->next; second = second->next; } } while(second != NULL && second != first && first != second); return first == second; } listNode* func(listNode* root, int k) { listNode* first = root; listNode* second = root; while(k--) { if(second != NULL) second = second->next; else break; } if(second == NULL) return NULL; else { while(second != NULL) { first = first->next; second = second->next; } return first; } } void merge_sort(listNode* h)//归并排序 { if(h->next != NULL) { listNode *first = h, *second; listNode *onestep, *twostep ,*previous; onestep = twostep = h; while(true) { if(twostep->next != NULL) { twostep = twostep->next; previous = onestep; onestep = onestep->next; } else break; if(twostep->next != NULL) twostep = twostep->next; else break; } previous->next = NULL; second = onestep; merge_sort(first); merge_sort(second); listNode* last_sorted; if(first->value <= second->value) { last_sorted = first; first = first->next; } else { last_sorted = second; second = second->next; } while(first != NULL && second != NULL) { if(first->value <= second->value) { last_sorted->next = first; last_sorted = first; first = first->next; } else { last_sorted->next = second; last_sorted = second; second = second->next; } } if(first == NULL) { last_sorted->next = second; } else last_sorted->next = first; } } };
原文地址:http://blog.csdn.net/u012999424/article/details/39449771