链表插入排序
来源:互联网 发布:男生手提包 知乎推荐 编辑:程序博客网 时间:2024/05/29 17:39
1、问题描述
用插入排序对链表排序,Given 1->3->2->0->null, return 0->1->2->3->null
2、实现思路
链表是从小到大排列的,若前一个比后一个大,后一个需要从前面找到合适的位置重新排序,用p、q代表前后相邻的节点,当p>q,时用一个新节点从头找到最后一个比q小的,将p插到其后,否则p、q依次向后移动。
3、代码
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
if(head ==NULL|| head->next ==NULL)
return head;
ListNode *a=new ListNode;
a->next=head;
ListNode *p = head ;
ListNode *q = head->next ;
while(q!=NULL)
{
if(p->val > q->val)
{
ListNode *b = a;
while(b->next->val<q->val)
b=b->next;
p->next = q->next;
q->next = b->next;
b->next = q;
}
else
p=p->next ;
q=p->next;
}
return a->next;
}
};
4、感想
若开始定义 ListNode *a=head;最后return a,会超时。比较前后相邻p、q时假设从 头节点到 p 节点 之间是排好序的,p>q之后,将p 与q后面的节点连接 ,q 插入适当的位置,否则p、q依次向后移动。
- 排序3:插入排序(普通插入排序 + 折半插入排序 + 链表插入排序 + 希尔排序)
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- 链表插入排序
- endl与/n
- Java中的赋值
- 大小端判断
- Android的多媒体信息获取
- 深入理解立即数与直接寻址
- 链表插入排序
- 错误票据
- LeetCode538. Convert BST to Greater Tree
- hdu N皇后问题 (简单DFS)
- Java基础积累(一)
- linux部署war包到tomcat下
- 几何变换与图像变换二--仿射变换
- MySQL InnoDB中的行锁 Next-Key Lock消除幻读
- nginx 安装