首页 > 代码库 > Sort List
Sort List
归并排序的链表法
#include<iostream>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution{public: ListNode* mergeLists(ListNode *a,ListNode *b) { if(a==NULL) return b; if(b==NULL) return a; ListNode *ret; ret = new ListNode(-1); ListNode *tail = ret; while(a && b) { if(a->val<b->val) { tail->next=a; a=a->next; } else { tail->next=b; b=b->next; } tail=tail->next; } if(a) tail->next=a; if(b) tail->next=b; ListNode *del; del=ret; ret=ret->next; delete del; return ret; } ListNode *getMid(ListNode *head) { if(!head) return NULL; if(!head->next) return head; ListNode *slow = head; ListNode *fast = head->next; while(fast && fast->next) { slow = slow->next; fast = fast->next->next; } return slow; } ListNode *sortList(ListNode *head) { if(!head) return NULL; if(!head->next) return head; ListNode *mid = getMid(head); ListNode *nextPart = NULL; if(mid) { nextPart = mid->next; mid->next = NULL; } return mergeLists( sortList(head), sortList(nextPart)); }} t;/*ListNode* ListNodeCreate(){ int data; ListNode *ret; ret = new ListNode(-1); ListNode *tail; tail=ret; while(cin>>data) { if(data=http://www.mamicode.com/=0) break;" "; L=L->next; }}int main(){ ListNode *L; L=ListNodeCreate(); ListNode *T=t.sortList(L); PrintList(T); return 0;}*/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。