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習題

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