方法1:
从后往前比较
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* Head=new ListNode(-1);
ListNode* pre=Head;
ListNode* cur=head->next;
ListNode* nx=NULL;
head->next=pre;
pre=head;
while(cur)
{
nx=cur->next;
if(pre->val<=cur->val)
{
cur->next=pre;
pre=cur;
}
else
{
ListNode* p=pre;
while(pre->next!=Head&&pre->next->val>cur->val)
{
pre=pre->next;
}
cur->next=pre->next;
pre->next=cur;
pre=p;
}
cur=nx;
}
cur=pre->next;
pre->next=NULL;
while(cur)
{
nx=cur->next;
cur->next=pre;
pre=cur;
cur=nx;
}
return Head->next;
}
};方法2:
从前往后比较
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* Head=new ListNode(-1);
ListNode* cur=head;
while(cur)
{
ListNode* nx=cur->next;
ListNode* pre=Head;
while(pre->next&&pre->next->val<cur->val)
{
pre=pre->next;
}
cur->next=pre->next;
pre->next=cur;
cur=nx;
}
return Head->next;
}
};
本文介绍了一种基于链表的插入排序算法实现方法,并提供了两种不同的实现思路:一种是从后往前进行比较,另一种是从前往后进行比较。每种方法都详细展示了如何调整链表节点以确保正确排序。
318

被折叠的 条评论
为什么被折叠?



