11月算法之链表排序

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。

前言

今年最后一波月更活动,不拿个参与奖,那多可惜,所以准备了个较为简单的算法七天乐。刚好自己在算法上也是有待加强。

题目描述

题目链接:链表排序

题目描述我用截图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

总结

链表算是比较常见的算法题,

坚持就是胜利。11月第4题算法完成,坚持就是胜利!!!

扫描二维码关注公众号,回复: 13306849 查看本文章

如果你还有想补充或者说明的欢迎留言评论。

熟能生巧(Practice make perfect!)。

567570eb04c107f0a5d6ccf93447999.png

       ↓↓↓

算法系列链接

       ↑↑↑

这里可以点!这里可以点!这里可以点!

猜你喜欢

转载自juejin.im/post/7033411887727378469