Sort List

来源:互联网 发布:java 1.7 32位官网 编辑:程序博客网 时间:2024/04/29 21:09



Sort a linked list in O(n log n) time using constant space complexity

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: int listLength(ListNode *head)  {      int len = 0;  while(head){      ++len;  head=head->next;  }  return len;  }  ListNode* findMiddlePre(ListNode *head,int len)  {  int x = len/2;  while(--x){      head=head->next;  }  return head;  }  ListNode* merge(ListNode* head1,ListNode *head2)  {  ListNode *temp=NULL,*p=head1,*q=head2,*pre1=NULL;  while(p && q){     if(p->val < q->val){  pre1=p;          p=p->next;  }else {  temp =q->next;  q->next = p;  if(pre1){      pre1->next = q;  pre1=q;  }else{  head1=q;  pre1=q;  }  q = temp; }  }  if(q) pre1->next=q;      return head1;  }  ListNode *sortList(ListNode *head) {  int len = listLength(head);  if(len==1 || len==0) return head;  ListNode *middlePre = findMiddlePre(head,len);  ListNode *middle = middlePre->next;  middlePre->next=NULL;  head = sortList(head);  middle = sortList(middle);  head = merge(head,middle);  return head;  } };

0 0