リンクリストの基本操作:要素削除・設計・反転をC言語で徹底解説
1. 問題203:リンクリストの特定要素削除
// ヘッダノードを使用しない実装(移動操作で削除)
struct ListNode* removeElements(struct ListNode* head, int val) {
// 先頭ノードが削除対象の場合
while (head != NULL && head->val == val) {
head = head->next;
}
// 先頭以外のノードを削除
struct ListNode* current = head;
while ...
8月9日 12:37 投稿
線形リストの基礎と実装:配列とリンクリストの比較
2.1 線形リストの定義と基本操作
2.1.1 線形リストの定義
線形リストとは、同一データ型を持つn個のデータ要素からなる有限の順序付き集合である。nを表の長さと呼び、n=0のとき空の線形リストとなる。線形リストをLとすると、一般的にL=(a1, a2, ..., an)と表される。
ここでa1は唯一の「最初」のデータ要素(先頭要素)、anは「最後」のデータ要素(末尾要素)である。 ...
7月31日 02:50 投稿
循環リンクリストの検出と入環ノード特定
循環リンクリストの検出
問題概要
リンクリストの先頭ノードheadが与えられたとき、循環構造の有無を判定する。循環構造とは、ノードのnextポインタを追跡することで再訪問可能なノードが存在する状態を指す。循環が存在しない場合はfalseを返す。
入力例
例1: head = [3,2,0,-4], pos=1 → true
例2: head = [1,2], pos=0 → true
例3: head = [1], pos=-1 → false
解法: ...
7月22日 22:34 投稿
C++によるスネークゲームの動的体節管理実装
スネークゲームのコア機能として、動的な体節管理ロジックの実装を検討します。主な要件は以下の3点です:
進行方向の動的変更
体節の動的追加
座標の連続更新による移動処理
方向制御と位置情報の定義を以下のように実装します。列挙型で進行方向を表現し、位置情報は構造体で管理します。
enum class MovementDirection {
NORTH,
SOUTH,
WEST,
EAST ...
7月13日 19:56 投稿
単方向連結リストの基本操作とC言語による実装
連続しないメモリ領域にデータを格納するため、順序付きリスト(配列)の挿入・削除における線形コストを回避する方法として、連結リストが用いられる。
連結リストは、メモリ上で連続しない複数の構造体から構成され、各構造体はデータ要素と次の要素へのポインタ(next)を持つ。末尾の要素のnextはNULLとなる。
単方向連結リストは、各ノードが1つのポインタのみを持つ ...
7月12日 21:04 投稿
Go言語で90%のリンクリスト問題を解決する3つのテクニック:LeetCode-Goでの逆転、環検出、およびマージ
Go言語で90%のリンクリスト問題を解決する3つのテクニック
この記事では、LeetCode-Go を使用して、リンクリストの逆転、環検出、およびマージを行う方法について説明します。これらのテクニックは、インタビューとアルゴリズムの練習で役立つでしょう。
### LeetCode-Goの特徴
LeetCode-Goは、Go言語で書かれたLeetCodeの問題解法集です。全ての問題が100%のテストカ ...
7月11日 21:05 投稿
Javaで学ぶリンクリストの基本操作とアルゴリズム
本日の課題
LeetCode 203. リンクリスト要素の削除
LeetCode 707. リンクリストの設計
LeetCode 206. リンクリストの反転
基本概念の整理
ノードの追加処理では、新しいノード(current.next)を先に処理し、古いノード(previous.next)を後から処理します。
ノードの削除では、現在のノードを削除するには、その前のノードを知る必要があります。そのため、currentとp ...
6月11日 21:03 投稿
リンクリストの概要
単一リンクリストノードの定義
LeetCodeでの単一リンクリストノードの定義は以下の通りです:
package com.wang.base.linkedList;
public class Demo01 {
class ListNode{
int val;
ListNode next;
ListNode(int x){
val=x;
}
}
}
しかし、実際のプログラミング言語では、より複雑な構造が使われます:
package co ...
5月30日 03:32 投稿
データ構造の基礎:配列、リンクリスト、スタック、キューの実装
配列(シーケンシャルリスト)
配列は連続したメモリ領域にデータを格納するデータ構造です。C言語環境では、名前付きのスタック配列または匿名のヒープ配列として実装できます。
配列の設計
配列を操作しやすくするために、専用の「管理構造体」が必要です。この構造体には通常以下の要素が含まれます:
配列の総容量
現在の最後の要素のインデックス位置
配列へのポイ ...
5月23日 18:40 投稿
LeetCode 203: リンクリストから指定された値を持つノードを削除する
問題
この問題では、リンクリストの先頭ノード head と整数 val が与えられます。リンクリストから Node.val == val を満たす全てのノードを削除し、新しい先頭ノードを返します。
例1:
入力: head = [1,2,6,3,4,5,6], val = 6
出力: [1,2,3,4,5]
例2:
入力: head = [], val = 1
出力: []
例3:
入力: head = [7,7,7,7], val = 7
出力: []
制約:
リスト内の ...
5月23日 02:08 投稿