常用算法整理:链表相关

本文详细梳理了链表的相关算法,包括删除/插入节点、翻转、去重、排序等基本操作,并提供了LeetCode上的经典例题解析,如翻转链表、去重、两路归并排序等。同时,介绍了处理链表问题的技巧,如使用dummy node和快慢指针。最后,探讨了K路归并问题,分析了不同解法的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表的考点

链表很多时候都是考察基本功,因为链表题大部分都不是很复杂,主要是对指针的操作,当然也有难的。
简单的题目包括 删除/插入节点、翻转、去重、排序等,难度高一些的题目依然是这些,不过会有一些条件,比如多个链表或者局部操作。

对链表题的两个技巧:
- 如果不确定最终结果的head,比如对两个链表进行排序,那么新建一个 dummy node。
- 可以通过快慢指针的方式取中间节点

入门题:

第一题 https://leetcode.com/problems/reverse-linked-list/

翻转链表,最最基本的一个操作。

var reverseList = function(head) {
    if(!head || !head.next) return head;

    var h = head, prev = null;

    while(h) {
        var t = h.next;
        h.next = prev;
        prev = h;
        h = t;
    }

    return prev;
};

第二题 https://leetcode.com/problems/remove-duplicates-from-sorted-list/

去重,基本思路就是找到一个节点 h,使 h.val = h.next.val,然后删除 h.next,如果重复到链表结束。

var deleteDuplicates = function(head) {
    if(!head || !head.next) return head;
    var h = head;
    while(h && h.next) {
        if(h.val == h.next.val) {
            h.next = h.next.next;
        } else {
            h = h.next;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值