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 投稿

リンクリスト操作の実践:ノード交換、削除、交点検出、循環検出

リンクリストのノード交換 反復解法 ListNode* swapPairs(ListNode* head) { if(!head || !head->next) return head; ListNode dummy(0); dummy.next = head; ListNode* prev = &dummy; ListNode* curr = head; while(curr && curr->next) { ListNode* nextNode = curr->next; // ノード交換 prev->n ...

5月20日 14:29 投稿

リンクリストの要素削除、設計、および逆転

Leetcode - 203 リンクリストの要素削除 この問題のシンプルな解決法は、削除する要素の位置を判断し、2つの場合を分けることです。削除する要素が先頭であるか、そうでないかです。先頭削除の場合は、一時的なポインタを作成し、頭のポインタを更新します。非先頭削除の場合は、前後の要素を連結します。 /** * Definition for singly-linked list. * struct ListNode { ...

5月19日 19:51 投稿

C言語を用いたWindowsコンソール版スネークゲームの実装手順

Windowsプラットフォーム上で標準ライブラリとWin32 APIを活用し、コンソール画面に表示されるスネークゲームを作成する方法を解説します。本手法はGUIフレームワークに依存しないため、リソース消費が小さく、アルゴリズムの理解やシステムコールの学習に適しています。 データ構造と状態管理 蛇の本体は単方向連結リストで管理します。各ノードは現在地座標と次ノードへ ...

5月13日 12:03 投稿