No.147 Insertion Sorted List

No.147 Insertion Sorted List

Sort a linked list using insertion sort.

单链表排序:使用插入排序

时间复杂度是排序算法的O(n^2),空间复杂度是O(1)

难度:无他,把思路理顺,注意细节,并测试一下;另外头结点的巧妙应用,int最小表示方式!!

 1 #include "stdafx.h"
 2 #include <limits>
 3 using namespace std;
 4
 5 struct ListNode
 6 {
 7     int val;
 8     ListNode *next;
 9     ListNode(int x):val(x),next(NULL){}
10 };
11 class Solution
12 {
13 public:
14     ListNode* insertionSortList(ListNode *head)
15     {//单链表排序:使用插入排序
16         if(head == NULL || head->next == NULL)
17             return head;
18
19         ListNode help(numeric_limits<int>::min());//创建头结点!!!
20         help.next = head;//!!!
21
22         ListNode *current;//记录当前要排序的节点
23         current = head->next;
24         head->next = NULL;
25
26         ListNode *tmp, *p;
27         while(current)
28         {
29             //从头到尾依次遍历以插入数据
30             //tmp = help.next;
31             tmp = &help;
32             while(tmp && (tmp->val < current->val))
33             {
34                 if((tmp->next) && (tmp->next->val < current->val))
35                     tmp = tmp->next;
36                 else
37                     break;//找到插入位置
38             }
39
40             p = current->next;
41             current->next = tmp->next;
42             tmp->next = current;
43             current = p;
44         }
45
46         return help.next;
47     }
48 };
时间: 2025-01-02 11:23:26

No.147 Insertion Sorted List的相关文章

Leetcode 147. Insertion Sort List 插入排序 in Java

147. Insertion Sort List Total Accepted: 80869 Total Submissions: 263074 Difficulty: Medium Sort a linked list using insertion sort. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { va

147. Insertion Sort List - Medium

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

147. Insertion Sort List

题目: Sort a linked list using insertion sort. 思路: 链表的插入排序和数组的插入排序略有不同.以链表4->2->3->1->5为例,为方便操作添加一个头节点-1,此时链表为-1->4->2->3->1->5.基本思路为一次选择前后两个节点,若后节点大于前节点则不断向后循环,若后节点小于前节点则取出后节点,并插入到头节点和前节点之间的位置. 举例说明: 头节点为-1,cur为节点4,nextnode为节点2.此

Java for LeetCode 147 Insertion Sort List

Sort a linked list using insertion sort. 解题思路: 插入排序,JAVA实现如下: public ListNode insertionSortList(ListNode head) { if(head==null||head.next==null) return head; ListNode root=new ListNode(Integer.MIN_VALUE); root.next=head; head=head.next; root.next.nex

[leetcode sort]147. Insertion Sort List

Sort a linked list using insertion sort. 利用插入排序对一个链表进行排序 思路和数组中的插入排序一样,不过每次都要从链表头部找一个合适的位置,而不是像数组一样可以从要插入的位置开始从后往前找合适的位置 1 class Solution(object): 2 def insertionSortList(self, head): 3 dummy = ListNode(-1) 4 dummy.next,cur= head,head 5 while cur and

147. Insertion Sort List (List)

Sort a linked list using insertion sort. class Solution { public: ListNode *insertionSortList(ListNode *head) { if(!head || !head->next) return head; ListNode *tail =head->next; head->next = NULL; ListNode *current; ListNode *tmp; while(tail){ if

leetcode 147. Insertion Sort List (Python版)

题目: Sort a linked list using insertion sort. 大意是要实现一个链表的插入排序 算法思路:     从原链表中逐个弹出一个node 对于每一个node用插入排序的思想插入新的升序排列的链表中 这里有一个小trick,leetcode有一组数据是1~4999的升序序列,如果我们采用如上方法会超时 于是我们在插入排序的时候设置一个last位,记录当前插入的位置 在下一次插入的时候与上次插入位置last比较,如果当前node.val > last.val,那么

[LeetCode] 147. Insertion Sort List 解题思路

Sort a linked list using insertion sort. 问题:实现单向链表的插入排序. 这是比较常规的一个算法题目. 从左往右扫列表,每次将指针的下一个元素插入前面已排好序的对应位置中. 需要注意的一定是,列表只能定位下一个元素,不能定位前一个元素,所有,每次插入位置的适合,都是对左右指针的下一个元素进行操作. 1 void insertSort(ListNode* p1, ListNode* p2){ 2 ListNode* next2 = p2->next; 3 p

LeetCode OJ 147. Insertion Sort List

Sort a linked list using insertion sort. Subscribe to see which companies asked this question 解答 对于链表的插入排序,用tmp_tail遍历链表,每次的待插入数是tmp_tail->next的元素,待插入数必须从头开始比较,当然从头开始比较时要注意处理待排序数小于或等于链表首元素的情况,因为插入在链表的首元素之前与一般情况的插入不同,而如果待插入数插入在它之前的数列中,则用于遍历链表的指针tmp_ta