アイデア:
思考の挿入アルゴリズムは非常に簡単です、この質問は、比較的リンクされているリストデータ型、後方に便利な1の移動要素ではなく、リストは唯一の次のポインタを見つけすぐに挿入することができないので、場所は、比較的面倒を挿入する必要があります見つけます場所。リストとヘッドノード、簡単にアクセスおよび還元、その後の判断にダミーポインタの前に。
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
const int inf = 0x3f3f3f3f;
if(head == NULL) return NULL;
if(head->next == NULL) return head;
//构建一个空指针指向开头
ListNode *headNULL = new ListNode(inf);
headNULL -> next = head;
ListNode *cur = head->next;
head -> next = NULL;
while(cur !=NULL){
ListNode *p = headNULL;
while(p->next != NULL && p->next->val < cur->val){ //当找到第一个大于当前值的节点时,退出循环
p = p->next;
}
//此时p->next 既是第一个大于当前值的节点,p指向应插入位置的前一个节点,即要在p和p->next之间插入当前值
ListNode *tmp = cur->next;
cur -> next = p->next;
p -> next = cur;
cur = tmp;
}
//返回首节点
return headNULL->next;
}
};