Leetcode 147. Insertion Sort List

Sort a linked list using insertion sort.

分析

使用插入排序,排序一个链表。
先列出首节点,然后依次对比节点大小,然后插入到合适的位置即可。
C代码如下,已通过。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* insertionSortList(struct ListNode* head) {
    if(head==NULL)return NULL;
    struct ListNode * ans=head,*p1,*p2,*p3,*p4;
    p1=head->next;
    ans->next=NULL;
    while(p1!=NULL)
    {
        p2=p1->next;
        p3=ans;
        p4=p3;
        while(p3!=NULL&&p3->val <= p1->val)
        {
            p4=p3;
            p3=p3->next;
        }
        if(p3==ans)
        {
            ans=p1;
            p1->next=p3;
        }
        else if(p3==NULL)
        {
            p4->next=p1;
            p1->next=NULL;
        }
        else
        {
            p4->next=p1;
            p1->next=p3;
        }
        p1=p2;
    }
    return ans;
}