22年刷算法第五题

107 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言

2022春招打卡活动,刷算法的快乐走起

题目描述

题目链接:链表排序

题目描述我用截图leetcode的为主,题目如下图:

image.png

思路分析

题目解析:给一个无序链表进行排序,我简单分析一下拿到题目我自己本人的第一思路,简单判断一下边界,比如链表为null,或者只有一个 直接返回,原来本身,不需要进行排序。

可以写个简单的方法实现一个:把一个指针指向的点插入一个有序的链表中。如果有这样的方法,这题目就变成遍历整个链表,然后依次用该方法把值插入一个记录新的链表里,直到遍历结束,返回这个新的有序链表。按这个思路进行了几次解法,发现函数实现还是有点问题;

看了一下解法提示:新get到一个解法,换成数组然后进行数组排序,再重新生成新的链表。 注意点,sort返回的是重排后的新数组本身,如果sort里面不加回调就按默认排序(按ASCII值去排序 会出现2在11之后),

解法:

var sortList = function(head) {
    if(!head||!head.next){
        return head
    }
    let list = new ListNode(0, head)
    let result = list
    let arr= []
    while(head){
        arr.push(head.val);
        head = head.next      
    }
    arr.sort((a,b)=>{
        return a-b
    });
    for (let i = 0; i < arr.length; i++) {
        result.next.val = arr[i]
        result = result.next
    }
    return list.next
};

image.png



![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a1de3d77e22840e4ad1a70e2c35fc731~tplv-k3u1fbpfcp-watermark.image?)





### 总结

坚持就是胜利。第5题算法完成!