LeetCode链表&链表概念梳理及代码示例

本文介绍了链表的基本概念、优劣势,并通过具体示例展示了链表的直观理解。接着,文章深入讨论了LeetCode中涉及链表的初级算法题目,包括删除链表节点、删除倒数第N个节点、反转链表、合并有序链表、回文链表和环形链表等,旨在帮助读者深化对链表操作的理解。

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

链表的介绍(包括定义、直观理解、优势和示例)以及leetcode上一些链表相关算法题的思路。

目录

正文部分:

为什么要用链表,定义链表的基础是什么。

链表的直观理解

举例 (用链表而不是用数组来存储电影信息)

解析

继续优化代码

 

leetcode算法题-初级-链表


正文部分:

  • 为什么要用链表,定义链表的基础是什么。

  • 链表的直观理解

 

  • 举例 (用链表而不是用数组来存储电影信息)

 

  • 解析

 

  • 继续优化代码

 

 


leetcode算法题-初级-链表

//删除某一节点
node->val = node->next->val;
node->next = node->next->next;
//删除节点
second->next=second->next->next;

ListNode *cur=head;
ListNode *pre=NULL;

while(cur){
    ListNode *next=cur->next;
    cur->next=pre; 
    pre=cur;  
    cur=next;
}
//应用递归
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {

    //*** 特殊情况讨论省略 ***

    if( l1->val < l2->val){
        l1->next = mergeTwoLists(l1->next, l2);
        return l1;
    }
        
    else{
        l2->next = mergeTwoLists(l2->next, l1);
        return l2;
    }
}
//快慢指针法找到中点,中点后反转链表
        ListNode* fast = head; 
        ListNode* slow = head; 
        ListNode* prev = nullptr;
 
        //find mid one
        while(fast){
            slow = slow->next;
            fast = fast->next? fast->next->next: fast->next;//fast->next 为空的时候就没有fast->next->next了。
        }

        //reverse 操作和上文反转链表一致
        //***省略
//依旧是快慢指针法,如果是环形链表,指针终将指到同一位置。
 while (fast->next && fast->next->next) {
        slow=slow->next;
        fast=fast->next->next;
        if(slow==fast){
            return true;
        }

最后,补充阅读材料,本文不再赘述:一个非常全面的带有应用的总结 Linked List的复习总结-from:简书dol_re_mi

 

参考资料:c primer 17章 从数组到链表  ||  leetcode习题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值