チェーンテーブルの挿入ソート
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;
}