Insertion Sort List (LeetCode)
2014-03-20 13:59
393 查看
题目:
Sort a linked list using insertion sort.
解释:
插入排序基本思想:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
C++ 解答:
Sort a linked list using insertion sort.
解释:
插入排序基本思想:假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
C++ 解答:
/** * 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 *r, *end, *key, *t, *s; //建立新的链表r,r为头指针,p为移动指针,end为末尾指针 r = new ListNode(head->val); int temp; key = head->next; ListNode *q; while(key!=NULL) { s = r; while(s!=NULL && s->next!=NULL && key->val >= s->val) { s = s->next; } if(key->val < s->val) //需要进行排序的时刻,就在r中q的前面插入一个节点就是啊,可以将key的值赋给q,然后在q的后面插入一个值就是 { temp = s->val; s->val = key->val; t = new ListNode(temp); t->next = s->next; s->next = t; } else if(key->val >= s->val && s->next==NULL) { end = new ListNode(key->val); s->next = end; } key = key->next; } return r; } };
相关文章推荐
- 关于指针的一些事情
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型
- C++可变参数的实现方法