【力扣】148. 排序链表

简介: 【力扣】148. 排序链表

148. 排序链表

题目描述

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

示例 1:

输入:head = [4,2,1,3]

输出:[1,2,3,4]

示例 2:

输入:head = [-1,5,3,4,0]

输出:[-1,0,3,4,5]

示例 3:

输入:head = []

输出:[]

提示:

  • 链表中节点的数目在范围 [0, 5 * 104] 内
  • -105 <= Node.val <= 105

进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

解题方法

  • C 利用数组排序
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
int my_cmp(int* a, int* b) { return *b - *a; }

struct ListNode* sortList(struct ListNode* head) {
    int val_tab[100000];
    struct ListNode* ptr = head;
    int val_size = 0;
    while (ptr) {
        val_tab[val_size] = ptr->val;
        val_size++;
        ptr = ptr->next;
    }

    qsort(val_tab, val_size, sizeof(int), my_cmp);
    ptr = head;
    while (val_size) {
        ptr->val = val_tab[val_size - 1];
        val_size--;
        ptr = ptr->next;
    }

    return head;
}



相关文章
|
7天前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
16 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
6天前
题目----力扣--回文链表
题目----力扣--回文链表
12 0
|
6天前
题目----力扣--合并两个有序链表
题目----力扣--合并两个有序链表
10 0
|
6天前
题目----力扣--反转链表
题目----力扣--反转链表
14 0
|
6天前
题目----力扣--链表的中间结点
题目----力扣--链表的中间结点
6 0
|
6天前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
12 1
|
7天前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
15 1
|
7天前
|
索引
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制
13 0
|
7天前
|
存储 算法 索引
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
【力扣刷题】只出现一次的数字、多数元素、环形链表 II、两数相加
19 1
|
7天前
|
索引
【力扣刷题】回文链表、环形链表、合并两个有序链表
【力扣刷题】回文链表、环形链表、合并两个有序链表
14 0