返回轨道
算法 · 2026-05-14 · 20 阅读

P182 单链表插入排序

算法 20 阅读

信号摘要

难度:Medium · 时长:08:14 · leetcode 147 · lintcode 173

P182 单链表插入排序

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你一个单链表,你要使用插入排序算法对它进行排序。

比如说,给你的链表是:

2 -> 0 -> 4 -> 1 -> 8

对这个链表进行排序,得到的链表是:

0 -> 1 -> 2 -> 4 -> 8

相关视频:单链表排序,插入排序

代码

public class AlgoCasts {
  public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
      val = x;
    }
  }

  // Time: O(n^2), Space: O(1)
  public ListNode insertionSortList(ListNode head) {
    ListNode dummy = new ListNode(0), p;
    ListNode cur = head, next;
    while (cur != null) {
      next = cur.next;
      p = dummy;
      while (p.next != null && cur.val >= p.next.val)
        p = p.next;
      cur.next = p.next;
      p.next = cur;
      cur = next;
    }
    return dummy.next;
  }

  // Time: O(n^2), Space: O(1)
  public ListNode insertionSortListFast(ListNode head) {
    ListNode dummy = new ListNode(0), p = dummy;
    ListNode cur = head, next;
    while (cur != null) {
      next = cur.next;
      if (p.next != null && cur.val < p.next.val) p = dummy;
      while (p.next != null && cur.val >= p.next.val)
        p = p.next;
      cur.next = p.next;
      p.next = cur;
      cur = next;
    }
    return dummy.next;
  }

}

📡 通讯频道