[LeetCode]147.Insertion Sort List

【题目】

Sort a linked list using insertion sort.

【分析】

【代码】

/*********************************
*   日期:2015-01-09
*   作者:SJF0115
*   题目: 147.Insertion Sort List
*   来源:https://oj.leetcode.com/problems/insertion-sort-list/
*   结果:AC
*   来源:LeetCode
*   博客:
**********************************/
#include <iostream>
using namespace std;

struct ListNode{
    int val;
    ListNode *next;
    ListNode(int x):val(x),next(NULL){}
};

class Solution {
public:
    ListNode *insertionSortList(ListNode *head) {
        if(head == NULL){
            return NULL;
        }//if
        // 添加头结点
        ListNode *dunny = new ListNode(-1);
        ListNode *p = dunny;
        ListNode *cur = head;
        // cur从第二个元素开始遍历 cur指向第一个未排序元素
        while(cur){
            // cur要跟之前每个元素进行比较,直到找到正确位置
            p = dunny;
            // 比较
            while(p->next != NULL && p->next->val < cur->val){
                p = p->next;
            }//while
            // 记录未排序的第一个元素
            ListNode *nextNode = cur->next;
            // cur放到相应的位置
            cur->next = p->next;
            p->next = cur;
            // 修改cur指针 指向未排序的第一个元素
            cur = nextNode;
        }//while
        return dunny->next;
    }
};

// 创建链表
ListNode* CreateList(int A[],int n){
    ListNode *head = NULL;
    if(n <= 0){
        return head;
    }//if
    head = new ListNode(A[0]);
    ListNode *p1 = head;
    for(int i = 1;i < n;i++){
        ListNode *node = new ListNode(A[i]);
        p1->next = node;
        p1 = node;
    }//for
    return head;
}

int main() {
    Solution solution;
    int A[] = {5,12,3,10,11,8};
    ListNode *list = CreateList(A,6);
    ListNode *head = solution.insertionSortList(list);
    // 输出
    ListNode *p = head;
    while(p){
        cout<<p->val<<" ";
        p = p->next;
    }//while
    cout<<endl;
}
时间: 2024-12-01 04:23:39

[LeetCode]147.Insertion Sort List的相关文章

Insertion Sort List

Sort a linked list using insertion sort. C++代码如下: #include<iostream> #include<new> using namespace std; //Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution {

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

LeetCode总结【转】

转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetcode.com的online judge中151道算法题目.除各个题目有特殊巧妙的解法以外,大部分题目都是经典的算法或者数据结构,因此做了如下小结,具体的解题思路可以搜索我的博客:LeetCode题解 题目 算法 数据结构 注意事项 Clone Graph BFS 哈希表 Word Ladder II

Java 容器 &amp; 泛型:四、Colletions.sort 和 Arrays.sort 的算法

一.Colletions和Arrays Collentions 此类完全是服务容器的"包装器".提供了一些操作或者返回容器的静态方法.而Arrays是用来操作数组的各种方法.其中它们的联系在于其中的Sort方法,也就是这次博客的主题.   二.插入,快速.归并基本算法 ① 插入排序 {a1},{a2,a3,a4,-,an}} {{a1⑴,a2⑴},{a3⑴,a4⑴ -,an⑴}} - {{a1(n-1),a2(n-1) ,-},{an(n-1)}} 原理及记忆方法:每次处理就是将无序数

java-容器-collection的sort方法

Java中如果需要对一个collections排序,需要继承于Comparable或者comparator接口,那么使用的排序算法是什么呢,一般情况下,排序算法包括:插入排序.快速排序.合并排序.冒泡排序等,java的Collections.sort算法调用的是合并排序,它是稳定排序,当数据接近有序的时候,效率更高,collections中的数据在排序前需要输入到array中,接着调用Arrays.sort函数来完成对象排序,最近通过迭代器将数组中排好序的对象些人到collection中,这也要

Swift实现Selection Sort选择排序算法的实例讲解_Swift

选择排序Selection Sort是一种和插入排序Insertion Sort类似的排序方法,它同样只适用于对规模不大的集合进行排序.它的核心思想是,在序列内部,把序列逻辑上分成已排序和未排序两部分,不断找到未排序部分中最符合排序规则的元素,添加进已排序部分,直到序列中所有元素都已经添加到了已排序部分,此时,整个序列就排序完成了. 冒泡排序是两两比较不断交换来实现排序,所以比较繁琐. 而选择排序  则是先选择要交换的那个数,才去交换.这样就可以省去很多不必要的步骤. Swift版实现示例: f

Java数据结构及算法实例:插入排序 Insertion Sort_java

/** * 选择排序的思想: * 每次循环前,数组左边都是部分有序的序列, * 然后选择右边待排元素,将其值保存下来 * 依次和左边已经排好的元素比较 * 如果小于左边的元素,就将左边的元素右移一位 * 直到和最左边的比较完成,或者待排元素不比左边元素小 */ package al; public class InsertionSort { public static void main(String[] args) { InsertionSort insertSort = new Insert

PHP排序算法类实例

  本文实例讲述了PHP排序算法类.分享给大家供大家参考.具体如下: 四种排序算法的PHP实现: 1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. 2) 选择排序(Selection Sort)的基本思想是: 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕. 3) 冒泡排序的基本思想是: 两两比较待排序记录的关键字,发现两个记录

Oracle 隐含参数

Oracle 隐含参数 点击(此处)折叠或打开 set pagesize 9999 set line 9999 col NAME format a40 col KSPPDESC format a50 col KSPPSTVL format a20 SELECT a.INDX,        a.KSPPINM NAME,        a.KSPPDESC,        b.KSPPSTVL FROM x$ksppi a,        x$ksppcv b WHERE a.INDX = b.