ブラシLeetCode-一方向チェーンテーブル


チェーンテーブル
  • 知識点
  • チェーンテーブルの長所と短所
  • 解題構想
  • コード実装
  • 小結

  • インテリジェントポイント
    チェーンテーブル:チェーンテーブルはメモリに不連続であるため、メモリの断片化の問題を効果的に解決することができる.チェーンテーブルを勉強して、まず絵図解法を使うことをマスターして、構想をもっとはっきりさせます;
    チェーンテーブル(Linked List):一般的なデータ構造であり、線形テーブルであるが、メモリ連続でデータを格納するのではなく、各ノードにデータ自体を格納するほか、メモリの後継点を格納するポインタを開いた.
    チェーンテーブルのメリットとデメリット
    チェーンテーブル構造を使用すると、配列が予めデータサイズを知る必要があるという欠点を克服でき、チェーンテーブル構造はコンピュータのメモリ空間を十分に利用し、柔軟なメモリ動態管理を実現することができる.しかし、チェーンテーブルは配列のランダム読み出しの利点を失い、同時にチェーンテーブルはノードのポインタドメインを増加させるため、空間オーバーヘッドが比較的大きい.チェーンテーブル分類:一方向チェーンテーブル、双方向チェーンテーブル、ループチェーンテーブル
    問題を解く構想.
    同じ下付き文字のサイズを比較し、比較して交換します.比較法:逐一比較、循環構造再帰法:1、終了条件2、戻り値3、本級再帰内容はちょっと難しい
    コード実装
    Python:
    class Solution:    
    	def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
    	        begin = ListNode(0)
    		res = begin        
    		while l1 and l2:            
    			if l1.val < l2.val:                
    				res.next = l1                
    				l1 = l1.next            
    			else:                
    				res.next = l2                
    				l2 = l2.next            
    				res = res.next        
    				res.next = l1 if l1 else l2        
    		return begin.next
    

    C++
    /** 
     * Definition for singly-linked list.
     *              
     *        ,         
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
         
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
         
            //         *      :   ?     
              if(l1 == NULL) {
         
                return l2;
            }
            if(l2 == NULL) {
         
                return l1;
            }
    
            ListNode* ihead = new ListNode(0);
            ListNode* node = ihead;
            while (l1 && l2)
            {
             
                if (l1->val > l2->val)    swap(l1, l2);
                node->next = l1;
                node = node->next;
                l1 = l1->next;
            }
            node->next = l1 ? l1 : l2;
            return ihead->next;
    
            
        }
    };
    

    小結
    前の人が書いた優秀な推薦コードをよく見て、自分の頭の中に溶け込んでチェーン時計を以前学んだことがあるのはただ勉強しただけで、問題を実践したことがなくて、ただひたすら自己感動して堅持して、今回知識を学んで比較するモードはとても良いです