チェーンテーブルの挿入ソート

5195 ワード

チェーンテーブルの挿入ソート
/*解題の考え方:この問題では、まずソートされた空のチェーンテーブルを作成し、各ノードに対してソートされたチェーンテーブルの適切な位置を見つけてから、挿入操作*/
typedef struct ListNode Node;
struct ListNode* insertionSortList(struct ListNode* head){
     
  if(head == NULL || head->next == NULL)
    return head;
  //      
  Node* sortHead = (Node*)malloc(sizeof(Node));
  //       
  sortHead->next = head;
  head = head->next;
  sortHead->next->next = NULL;
  //      
  Node* cur = head;
  while(cur)
  {
     
    //    next  
    Node* next = cur->next;

    //          ,                
    Node* sortPrev = sortHead;
    Node* sortCur = sortHead->next;
     
    while(sortCur)
    {
     
      if(cur->val > sortCur->val)
      {
     
        sortPrev = sortCur;
        sortCur = sortCur->next;
      }
      else
      {
     
        break;
      }
    }
    //         
    sortPrev->next = cur;
    cur->next = sortCur;

    cur = next;
  }

  Node* sortList = sortHead->next;
  free(sortHead);

  return sortList; 
}