链表插入排序

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param head: The first node of linked list.
     * @return: The head of linked list.
     */
    public ListNode insertionSortList(ListNode head) {
        // write your code here
        if(head == null){
            return null;
        }
        ListNode result = new ListNode(-1);
        ListNode pre = result;
        ListNode cur = head;
        while(cur!= null){
            ListNode next = cur.next;
            pre = result;
            while(pre.next!=null&& pre.next.val<=cur.val){
                pre = pre.next;
            }
            cur.next = pre.next;
            pre.next = cur;
            cur = next;
        }
        return result.next;
    }
}

  

时间: 2024-08-05 17:38:10

链表插入排序的相关文章

单链表插入排序

输入:一个无序的单链表的头结点 输出:一个有序的单链表的头结点(这里假设是升序排序) 分析: 1. 插入排序的基本思想:将一个节点插入到一个有序的序列中.对于链表而言,要依次从待排序的链表中取出一个节点插入到已经排好序的链表中,也就是说,在单链表插入排序的过程中,原链表会截断成两部分,一部分是原链表中已经排好序的节点,另一部分是原链表中未排序的节点,这样就需要在排序的过程中设置一个当前节点,指向原链表未排序部分的第一个节点. 注意单链表插入排序和数组插入排序的不同:数组插入排序是从排好序的部分的

链表插入排序、链表归并排序

1.链表 1.1链表的存储表示 //链表的存储表示 typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode, *LinkList; 1.2基本操作 创建链表: /* * 创建链表. * 形参num为链表的长度,函数返回链表的头指针. */ LinkList CreatLink(int num) { int i, data; //p指向当前链表中最后一个结点,q指向准备插入的结点.

【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】

[147-Insertion Sort List(链表插入排序)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Sort a linked list using insertion sort. 题目大意 对一个单链表表进行插入排序 解题思路 使用一个指针p指向未排好序的链表的第一个结点,在排序好的部分中找到找第一个大于等于q的前驱结点,将p对应的结点插入到正确位置,p重新指向未排好序的链表的第一个结点.直到链表完成排序好. 代码实现 结点类 算法实现类 publi

链表插入排序——单指针移动

前面分享了双指针移动实现插入排序,第一个指针pre的作用是为了插入数据节点,第二个指针prel作用是和待插入的数据节点进行比较,今天分享只用一个指针实现链表的插入排序. 需要注意的只有一点指针必须在比较的数据节点之前,这样才能实现交换内存地址,从而实现插入功能. 关于图,请大家看前面的双指针实现链表插入排序的博文,只需要将prel这个指针删除掉就行 直接分享核心代码 node *q,*p, *pre; //q指针指向待插入的数据节点,pre指向被比较的数据节点前面一个节点 q = head->n

LintCode_173 链表插入排序

题目 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null C++代码 ListNode *insertionSortList(ListNode *head) { // write your code here if (!head) return NULL; ListNode* root = head; head = head->next; root->next = NULL;

Java for LintCode 链表插入排序

用插入排序对链表排序 解题思路: 最省时间的方法是使用优先级队列,但是无法通过,那就直接插入排序好了. public ListNode insertionSortList(ListNode head) { ListNode root = new ListNode(Integer.MIN_VALUE); while (head != null) { ListNode temp = root; while (temp.next != null && head.val >= temp.ne

LeetCode Insertion Sort List 链表插入排序

题意:给一个链表,实现插入排序. 思路:O(1)空间,O(n*n)复杂度.将排好的用另一个链表头串起来,那个链表头最后删掉,再返回链表. 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 pub

LintCode 链表插入排序

用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null 法1:刚开始没看到是插入排序 用的冒泡法 /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next =

链表的排序 ---链表插入排序

链表的插入排序 Insertion Sort List 1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.而对有链表,没有办法随机读取.所以插入排序,对每一个节点来说,只能从头节点开始,慢慢的向后开始比较,如果找到位置则将节点插入序列中. 代码如下,leetcode accept. /** * Definition for singly-linked list. * struct ListNod

147 Insertion Sort List 链表插入排序

用插入排序对链表进行排序. 详见:https://leetcode.com/problems/insertion-sort-list/description/ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListN