LeetCode OJ:Insertion Sort List (插入排序链表)
Sort a linked list using insertion sort.
用插入排序来排序一个list,额, 我写的好麻烦啊, debug了好久,至少提交了5次。。。写吐了快,先贴代码,写的也好乱啊:
class Solution {
public:
ListNode* insertionSortList(ListNode* hed) {
if (hed == NULL) return NULL;
head = hed;
ListNode * insertPosPrev;
ListNode * afterP;
ListNode * prev = head;
ListNode * p = head->next;
while (p != NULL) {
if (p->val > prev->val){
prev = p;
p = p->next;
continue;
}
insertPosPrev = findInsertPos(p);
if (insertPosPrev == NULL) {//插入头节点之前
afterP = p->next;
prev->next = afterP;
p->next = head;
head = p;
p = afterP;
continue;
}
else if (p != insertPosPrev->next) {
afterP = p->next;
prev->next = afterP;
p->next = insertPosPrev->next;
insertPosPrev->next = p;
p = afterP;
continue;
}
prev = p;
p = p->next;
}
return head;
}
private:
ListNode * head;
ListNode * findInsertPos(ListNode * end)
{
if (head->val >= end->val)
return NULL; //如果插入点在头节点那么返回NULL
ListNode * prev = head;
ListNode * p = prev->next;
while (p != end) {
if (prev->val < end->val && p->val >= end->val)
return prev;
prev = p;
p = p->next;
}
return prev;
}
};
这里贴一个大神的代码,有时间来看看,暂时还没看懂啊
class Solution
{
public:
ListNode *insertionSortList(ListNode *head)
{
if(head==NULL || head->next==NULL) return head;
ListNode *cur=head;
ListNode *helper=new ListNode();
ListNode *pre;
while(cur)
{
ListNode *next=cur->next;
pre=helper;
while(pre->next!=NULL && pre->next->val<cur->val)
{
pre=pre->next;
}
cur->next=pre->next;
pre->next=cur;
cur=next;
}
return helper->next;
} } ;
下面是java写的,第一遍写的基本上可以不看了,写的太麻烦了,下面这个写的稍微简单一点,代码如下:
public class Solution {
public ListNode insertionSortList(ListNode head) {
if(head == null) return null;
ListNode helper = new ListNode(Integer.MIN_VALUE);//将第一个节点的值设置成最小的
helper.next = head;
ListNode p = head.next;
ListNode pPre = head;
ListNode scan = helper;
while(p != null){
if(p.val >= pPre.val){
p= p.next;
pPre = pPre.next;
}else{
while(p.val > scan.next.val){
scan = scan.next;
}
if(p.val >= scan.val && p.val <= scan.next.val){
ListNode tmp = scan.next;
scan.next = p;
pPre.next = p.next;
p.next = tmp;
p = pPre.next;
scan = helper; // 将扫描节点重新放置到链表的前部
}
}
}
return helper.next;
}
}
LeetCode OJ:Insertion Sort List (插入排序链表)的更多相关文章
- [LeetCode] 147. Insertion Sort List 链表插入排序
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...
- LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...
- leetcode——Insertion Sort List 对链表进行插入排序(AC)
Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNo ...
- [Leetcode Week16]Insertion Sort List
Insertion Sort List 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/insertion-sort-list/description/ ...
- leetcode 【 Insertion Sort List 】 python 实现
题目: Sort a linked list using insertion sort. 代码:oj测试通过 Runtime: 860 ms # Definition for singly-linke ...
- 【leetcode】Insertion Sort List (middle)
Sort a linked list using insertion sort. 思路: 用插入排序对链表排序.插入排序是指每次在一个排好序的链表中插入一个新的值. 注意:把排好序的部分和未排序的部分 ...
- leetcode:Insertion Sort List
Sort a linked list using insertion sort. 分析:此题要求在链表上实现插入排序. 思路:插入排序是一种O(n^2)复杂度的算法,基本想法就是每次循环找到一个元素在 ...
- [LeetCode] 147. Insertion Sort List 解题思路
Sort a linked list using insertion sort. 问题:实现单向链表的插入排序. 这是比较常规的一个算法题目. 从左往右扫列表,每次将指针的下一个元素插入前面已排好序的 ...
- leetcode 名单 Insertion Sort List
Insertion Sort List Total Accepted: 24444 Total Submissions: 96639My Submissions Sort a linked list ...
- [LeetCode 题解]: Insertion Sort List
Sort a linked list using insertion sort. 题目要求:链表的插入排序,由于没有时间复杂度的要求,可以直接循环操作. /** * Definition for si ...
随机推荐
- Win7中的IIS配置asp时出现“出现403 文件夹禁止訪问错误”!
Win7中的IIS配置asp时出现"出现403 文件夹禁止訪问错误"! 在[默认文档]中设一下启动文件即可了.
- ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon
在使用真机调试Android程序时,报错如下: could not read ok from ADB Server * failed to start daemon error: cannot con ...
- 学点TCPDUMP
[root@future ~]# yum install tcpdump 官网地址: https://nmap.org/ 还有中文手册,太感动了 https://nmap.org/man/zh/man ...
- SQL基础三
一.SQL ORDER BY 子句 ORDER BY 语句用于对结果集进行排序,默认按照升序对记录进行排序,如果需要按照降序进行排序,需要在后面追加关键字DESC.应用如下: 原始的表:Orders表 ...
- [ Error 分析] Comparison method violates its general contract!
public static void main(String[] args) { List<Long> ret = new ArrayList<>(); int n = 103 ...
- oradebug工具使用2(转载)
oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,如SMON.PMON进程,也可以通过进程号使进程挂起和恢 ...
- begoo——路由设置
路由本质是URL与要为该URL调用的视图函数之间的映射表,其实就是你定义的使用那个URL调用那段代码的关系对应表. 首先看一下最简单的路由: package routers import ( &quo ...
- Chrome浏览器快捷键
Chrome窗口和标签页快捷键:Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件 按 ...
- J2EE--Struts2基础开发笔记
内容中包含 base64string 图片造成字符过多,拒绝显示
- 2018-2019-2 20165114《网络对抗技术》Exp5 MSF基础应用
Exp5 MSF基础应用 目录 一.实验目标 二.基础问题回答 三.实验过程记录 3.1主动攻击实践 ms08_067+generic/shell reverse_tcp ms17_010_etern ...