目录
1.原题链接:
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ī)焉,为天下浑其心。
百姓皆注其耳目,圣人皆孩之。
解释:
圣人没有私心,以百姓之心为心。
善良的人,圣人善待于他,不善良的人,圣人也善待于他;结果可以得到共同善良的效果。
诚信的人,圣人诚信于他,不诚信的人,圣人也诚信于他;结果可以得到共同诚信的效果。
圣人治理天下,不怀私心偏见,使人民之心归于淳朴。
人民都倾注其听力以倾听他的教诲,都倾注其视力以模仿他的品行,而圣人把教育培养人民视为自己的天职和使命,就像父母对待自己的孩子一样。