osio_sioの日記

自分用メモ

leetcodeのListNodeについてメモ

始めに

つい最近leetcodeを始めたものの、以下のような問題が出てきてListNodeってなんぞ?となって詰まったのでメモ。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        
    }
};

ListNodeとは何か

ちょっと調べたところ、「単方向連結リスト」のことらしい。 具体的に書いておくと、データを格納する「要素」と「ポインタ」を組にした「セル」と呼ばれる単位で,データの順序を管理する連結リスト構造。コードでいうint valが要素でListNode *nextが次のListNodeオブジェクトへのポインタ。 ref:http://www.ced.is.utsunomiya-u.ac.jp/lecture/2022/prog/p2/kadai2/3_list_1.php

ListNode() : val(0), next(nullptr) {}は、デフォルトコンストラクタ。valを0で初期化し、nextをnullptr(次のノードがないことを意味する)で初期化。

ListNode(int x) : val(x), next(nullptr) {}は、引数として整数xを取るコンストラクタ。valをxで初期化し、nextをnullptrで初期化。

ListNode(int x, ListNode *next) : val(x), next(next) {}は、引数として整数xとListNodeへのポインタnextを取るコンストラクタ。valをxで初期化し、nextを引数で与えられたnextで初期化。

操作方法

  1. ノードの追加 リストの終端に新しいノードを追加する
   ListNode* newNode = new ListNode(5); // 値が5の新しいノードを作成
   if (head == nullptr) {
       head = newNode; // リストが空の場合、headを新しいノードに設定
   } else {
       ListNode* current = head;
       while (current->next != nullptr) {
           current = current->next; // リストの最後まで移動
       }
       current->next = newNode; // 最後のノードのnextを新しいノードに設定
   }
  1. ノードの削除 リストからノードを削除するには、削除するノードの前のノードのnextを、削除するノードの次の ノードに設定
   ListNode* current = head;
   ListNode* previous = nullptr; //削除したいノードの前のノードを見つけたい
   while (current != nullptr && current->val != value) { // valueは削除したい値
       previous = current;
       current = current->next;
   }
   if (current != nullptr) { // 削除するノードが見つかった場合
       if (previous != nullptr) {
           previous->next = current->next;
       } else {
        head = current->next; // ヘッドを削除する場合
       }
       delete current; // ノードのメモリを解放
   }

問題(今後追記)

Add Two Numbers : https://leetcode.com/problems/add-two-numbers/?envType=list&envId=xi4ci4ig