leetCode No.147 Insertion Sort

来源:互联网 发布:成都知美术馆怎么去 编辑:程序博客网 时间:2024/06/08 15:45

题目

Sort a linked list using insertion sort.

标签:Linked List、Sort
相似问题: (M) Sort List

题意

在单链表这种数据结构上进行插入排序。

解题思路

插入排序就是将待排序的一串数字(可以是数组,链表等)分为有序区和无序区,每次都从无序区取出一个需要排序的数插入到有序区合适的位置。时间复杂度为O(n^2)。
在本题中要注意链表的指针的改变。

代码

class ListNode {      int val;      ListNode next;      ListNode(int x) { val = x; }  }public class Solution {    public ListNode insertionSortList(ListNode head) {        ListNode root = new ListNode(0);        root.next = head;        ListNode p = head;//当前指针        ListNode q;        ListNode r;        while (p != null && p.next != null) {            if (p.val <= p.next.val) {//当前值小于等于下一个节点的值,无需排序。                p = p.next;            } else {                q = p.next;//q指向当前指针的下一节点,即需要被插入排序的节点                p.next = q.next;//当前指针指向q的下一节点,即删除需要被插入排序的节点                r = root;//指向排序区的头结点                while (r.next.val <= q.val) {//找到第一个比q大的节点的前驱节点                    r = r.next;                }                q.next = r.next;//插入这个节点                r.next = q;            }        }        return root.next;    }}

相关链接

原题
所有题解代码(github)

0 0
原创粉丝点击