/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *getMiddle(ListNode *head) { ListNode *fast=head; ListNode *slow=head; while(fast->next!=NULL) { fast=fast->next; if(fast->next!=NULL) fast=fast->next; else break; slow=slow->next; } return slow; } ListNode *merge(ListNode *list1,ListNode *list2) { ListNode *newhead=new ListNode(0); ListNode *head=newhead; while(list1!=NULL&&list2!=NULL) { if(list1->val<list2->val) { newhead->next=list1; list1=list1->next; } else { newhead->next=list2; list2=list2->next; } newhead=newhead->next; } if(list1==NULL) newhead->next=list2; else newhead->next=list1; return head->next; } ListNode *sortList(ListNode *head) { if(head==NULL||head->next==NULL) return head; ListNode *mid=getMiddle(head); ListNode *head2=mid->next; mid->next=NULL; return merge(sortList(head),sortList(head2)); } };
使用头结点归并的方法可大幅度降低逻辑上的复杂度
原文:http://blog.csdn.net/u013011841/article/details/43413343