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.next.val)
				temp = temp.next;
			if(temp.next==null){
				temp.next=head;
				head=head.next;
				temp.next.next=null;
			}
			else{
				ListNode temp2 = temp.next;
				temp.next=head;
				head=head.next;
				temp.next.next=temp2;
			}
		}
		return root.next;
    }
时间: 2024-10-12 04:25:28

Java for LintCode 链表插入排序的相关文章

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 =

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

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

单链表插入排序

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

Java实现双链表

public class DoubleLink<T> { //存放第一个指针 private Node<T> firstNode; //存放最后一个指针 private Node<T> lastNode; //存放链大小 private int size; //构造函数 public DoubleLink() {} // --------------------------------add()系列---------------------------------- p

java实现单链表

前面已经介绍了java如何实现顺序链表:http://www.cnblogs.com/lixiaolun/p/4643664.html 接下来,我们开始学习java实现单链表. 单链表类 package linklist; public class LinkList { class Element { public Object value=null; private Element next=null; } private Element header = null;//头结点 /** * 初

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

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指向准备插入的结点.

Linked List Cycle leetcode II java (寻找链表环的入口)

题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up: Can you solve it without using extra space? 题解: 这个连同I都是很经典的题啦,刷CC150时候就折磨了半天. 其实就推几个递推公式就好..首先看图(图引用自CC150): 从链表起始处到环入口长度为:a,从环入口到Faster和Sl

(java描述)关于链表的代码-----单双、循环链表、约瑟夫环、多项式相加

将链表头尾倒置 将几个链表合并成一个新的链表,将链表中重复的节点去掉,并按大小排序 双向循环链表 单向循环链表(约瑟夫循环) 多项式相加 程序源代码 单链表.单向循环链表结点类 package javab; public class Node { int data; Node next; public Node(int data){ this.data=data; } } 第一题代码: package javab; import java.util.Scanner; public class I

java 实现单链表的逆序

</pre><pre name="code" class="java">package com.ckw.mianshi; /** * java 实现单链表的逆序 * @author Administrator * */ public class SingleLinkedReverse { class Node{ int data; Node next; public Node(int data){ this.data = data; } }