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

链表的介绍(包括定义、直观理解、优势和示例)以及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习题

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章