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