LeetCode 147. 对链表进行插入排序

目录

1.原题链接:

2.从前往后插入结点:

代码实现: 

3.提交结果:

4.读书分享:


1.原题链接:

147. 对链表进行插入排序

2.从前往后插入结点:

对于本题,我们可以以头结点作为参考,将头结点与原结点断开,然后遍历后续结点,将小于等于头结点值的结点头插在头结点前面,然后更换头结点;如果遍历到的结点的值大于头结点的值,就遍历排序了的链表,将结点插入进去。

断开头结点:

遍历到的结点的值小于等于头结点的值: 

遍历到的结点的值大于头结点的值: 

代码实现: 

typedef struct ListNode ListNode;
struct ListNode* insertionSortList(struct ListNode* head) {
    if(head==NULL||head->next==NULL)//当没有结点或只有一个结点
    {
        return head;
    }

    //将头结点与后续结点断开
    ListNode* sortHead=head;
    ListNode* cur=head->next;
    sortHead->next=NULL;

    while(cur)
    {
        ListNode* next=cur->next;//保存当前遍历到的结点的下一个结点的地址
        if(cur->val<=sortHead->val)//遍历到的结点的值比排序链表里的值都小
        {
            cur->next=sortHead;
            sortHead=cur;
            cur=next;
        }
        else
        {
            //存储两个指针,方便前插
            ListNode* sortPrev=sortHead;
            ListNode* sortCur=sortHead->next;
            while(sortCur)
            {
                if(sortCur->val>cur->val)//当排序链表里有值更大的结点时
                {
                    sortPrev->next=cur;
                    cur->next=sortCur;
                    break;
                }
                sortPrev=sortCur;
                sortCur=sortCur->next;
            }
            //当cur所指向的结点的值比排序链表里的值都大,尾插
            sortPrev->next=cur;
            cur->next=sortCur;//sortCur为NULL
            cur=next;
        }
    }
    return sortHead;      
}

3.提交结果:

4.读书分享:

 《道德经·第四十九章》:

圣人常无心,以百姓心为心。

善者,吾善之,不善者,吾亦善之;德善。

信者,吾信之,不信者,吾亦信之:德信。

圣人在天下,歙歙(xī)焉,为天下浑其心。

百姓皆注其耳目,圣人皆孩之。

解释:

圣人没有私心,以百姓之心为心。

善良的人,圣人善待于他,不善良的人,圣人也善待于他;结果可以得到共同善良的效果。

诚信的人,圣人诚信于他,不诚信的人,圣人也诚信于他;结果可以得到共同诚信的效果。

圣人治理天下,不怀私心偏见,使人民之心归于淳朴。

人民都倾注其听力以倾听他的教诲,都倾注其视力以模仿他的品行,而圣人把教育培养人民视为自己的天职和使命,就像父母对待自己的孩子一样。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值