链表操作实现类

来源:互联网 发布:网络脆弱性 编辑:程序博客网 时间:2024/05/16 18:52

有哪里不对的请指正

#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;}}};


1 0
原创粉丝点击