博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
阅读量:5278 次
发布时间:2019-06-14

本文共 2327 字,大约阅读时间需要 7 分钟。

Sort a linked list using insertion sort.

A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.

With each iteration one element (red) is removed from the input data and inserted in-place into the sorted list

Algorithm of Insertion Sort:

1 Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list.2 At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there.3 It repeats until no input elements remain.

Example 1:

Input: 4->2->1->3Output: 1->2->3->4

Example 2:

Input: -1->5->3->4->0Output: -1->0->3->4->5

解题思路:将原链表中元素一个一个取出来,在新链表中比较进行排序。时间复杂度为O(n2),是一种效率并不是很高的算法,但是空间复杂度为O(1),以高时间复杂度换取了低空间复杂度。

方法一(C++)

 

1 ListNode* insertionSortList(ListNode* head) { 2         ListNode* dummy=new ListNode(-1),*cur=dummy; 3         while(head){ 4             ListNode* t=head->next; 5             cur=dummy; 6             while(cur->next&&cur->next->val<=head->val) 7                 cur=cur->next; 8             head->next=cur->next; 9             cur->next=head;10             head=t;11         }12         return dummy->next;13     }

 

(Java)

1  public ListNode insertionSortList(ListNode head) { 2         ListNode dummy=new ListNode(-1),cur=dummy; 3         while(head!=null){ 4             ListNode t=head.next; 5             cur=dummy; 6             while(cur.next!=null&&cur.next.val<=head.val) 7                 cur=cur.next; 8             head.next=cur.next; 9             cur.next=head;10             head=t;11         }12         return dummy.next;13     }

方法二:不符合题目中的要求,只是完成最基本的链表排序功能,借助vector中的sort排序方法。(C++)

1  ListNode* insertionSortList(ListNode* head) { 2         vector
m; 3 while(head){ 4 m.push_back(head->val); 5 head=head->next; 6 } 7 sort(m.begin(),m.end()); 8 ListNode* newhead=new ListNode(-1); 9 while(!m.empty()){10 ListNode* cur=new ListNode(m.back());11 m.pop_back();12 cur->next=newhead->next;13 newhead->next=cur;14 }15 return newhead->next;16 }

 

posted on
2019-03-29 10:58  阅读(
...) 评论(
...) 收藏

转载于:https://www.cnblogs.com/hhhhan1025/p/10619875.html

你可能感兴趣的文章
关于感冒,突然有了想法。
查看>>
[源码和文档分享]基于QT的网络五子棋游戏程序的设计与实现
查看>>
POJ1509 Glass Beads [后缀自动机]
查看>>
ASP.NET MVC中加入Web Forms
查看>>
kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件
查看>>
python下载及安装方法
查看>>
C#、OC递归锁
查看>>
CF981H K Paths
查看>>
MVC的Controller-Action布局:单独的创建/编辑页面还是创建/编辑/查看一体的页面?...
查看>>
iPad Multitasking
查看>>
SharePoint 和 Windows Phone 7 开发人员培训资源
查看>>
firewalld 操作实践
查看>>
[数据结构]堆的建立和排序
查看>>
通过IP得到IP所在地省市
查看>>
2019.1.19equals方法重写
查看>>
Diy页面服务端渲染解决方案
查看>>
Unity5.3.4版本打包APk,安卓识别不了 Application.systemLanguage
查看>>
MyEclipse 快捷键
查看>>
symbian塞班系统支持格式
查看>>
TeamWork#3,Week5,Release Notes of the Alpha Version
查看>>