LeetCode#147. Insertion Sort List
来源:互联网 发布:淘宝手机怎么改好评 编辑:程序博客网 时间:2024/06/05 02:41
- 题目:利用插入排序对链表进行排序
- 难度:Medium
- 思路:思路同数组的插入排序(第i趟排序保证第i+1个元素处于前i个元素中的正确位置上),但是链表的指针变化需要注意(在这个题目中需要定义4个指针才能调整成功)
- 代码:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode insertionSortList(ListNode head) { if(head == null || head.next == null){ return head; } int len = 0; ListNode node = head; while(node != null){ len++; node = node.next; } ListNode newHead = new ListNode(0); newHead.next = head; for(int i=1; i < len; i++){ int step = i; ListNode compareNode = newHead;//第i趟插入,第i+1个元素找到自己的位置 ListNode beforeCompare = compareNode; while(step >= 0){ beforeCompare = compareNode; compareNode = compareNode.next; step--; } ListNode pre = newHead; ListNode next = pre.next; int j = 1; while(j <= i && next.val <= compareNode.val){ pre = next; next = next.next; j++; } //如果前面没有元素比compareNode的值大,就不需要修改指针 if(pre != beforeCompare){ pre.next = compareNode; beforeCompare.next = compareNode.next; compareNode.next = next; } } return newHead.next; }}
- Discuss里简洁的算法(只用了3个临时指针)
public class Solution { public ListNode insertionSortList(ListNode head) { if( head == null ){ return head; } ListNode helper = new ListNode(0); //new starter of the sorted list ListNode cur = head; //the node will be inserted ListNode pre = helper; //insert node between pre and pre.next ListNode next = null; //the next node will be inserted //not the end of input list while( cur != null ){ next = cur.next; //find the right place to insert while( pre.next != null && pre.next.val < cur.val ){ pre = pre.next; } //insert between pre and pre.next cur.next = pre.next; pre.next = cur; pre = helper; cur = next; } return helper.next; }}
0 0
- LeetCode 147. Insertion Sort List
- [LeetCode]147.Insertion Sort List
- [leetcode] 147.Insertion Sort List
- 147. Insertion Sort List LeetCode
- LeetCode 147. Insertion Sort List
- LeetCode *** 147. Insertion Sort List
- Leetcode 147. Insertion Sort List
- leetcode.147. Insertion Sort List
- leetcode 147. Insertion Sort List
- LeetCode-147.Insertion Sort List
- LeetCode - 147. Insertion Sort List
- [leetcode] 147. Insertion Sort List
- [LeetCode] 147. Insertion Sort List
- Leetcode-147. Insertion Sort List
- [LeetCode]147. Insertion Sort List
- LeetCode 147. Insertion Sort List
- 【LeetCode】 147. Insertion Sort List
- Leetcode 147. Insertion Sort List
- Windows安装配置FitNesse
- Docker命令解读-三
- day80_babasport第六天
- 声纹识别
- vim
- LeetCode#147. Insertion Sort List
- Linux进程间通信——使用消息队列
- ubuntu16.04安装xmind8
- ionic select控制器中无法获取到value
- linux下拨号vpn方法
- 微服务实战:服务发现的可行方案以及实践案例
- Docker命令解读-四
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- iOS并发编程(二)-Operation Queues-(待改阅……)