- 题目描述
对链表进行插入排序。
插入排序算法:
插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
重复直到所有输入数据插入完为止。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
-
思路
新建一个链表,遍历原来的链表,将元素按大小插入新链表中。 -
c++实现
#include <iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL){}
};
ListNode *insertionSortList(ListNode *head) {
if(head==NULL ||head->next==NULL)
return head;
ListNode *res=new ListNode(0);
ListNode *cur=head;
while(cur)
{
ListNode *next=cur->next;
ListNode *node=res;
while(node->next!=NULL && node->next->val<cur->val)
node=node->next;
cur->next=node->next;
node->next=cur;
cur=next;
}
return res->next;
}
int main()
{
ListNode *h=new ListNode(3);
h->next=new ListNode(2);
h->next->next=new ListNode(4);
ListNode *result=insertionSortList(h);
for(int i=0;i<3;i++)
{
cout<<result->val<<"->";
result=result->next;
}
cout<<endl;
return 0;
}