ภาพรวม
LinkedList<T> ใน System.Collections.Generic เป็น doubly linked list ที่รองรับการเพิ่ม/ลบที่หัว/ท้าย/กลางได้อย่างมีประสิทธิภาพ O(1) หากมี reference ของโหนด
โค้ดตัวอย่าง: การสร้างและ Traversal
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(string[] args) {
var list = new LinkedList<string>();
// เพิ่มข้อมูล
list.AddLast("Tim");
list.AddLast("Tom");
list.AddFirst("First");
// Traversal แบบ foreach (ง่ายที่สุด)
Console.WriteLine("Forward traversal:");
foreach (var item in list) {
Console.WriteLine(item);
}
// Traversal แบบ Manual (ใช้ Node)
Console.WriteLine("\\nManual traversal with nodes:");
var node = list.First;
while (node != null) {
Console.WriteLine(node.Value);
node = node.Next;
}
// Traversal ย้อนหลัง
Console.WriteLine("\\nBackward traversal:");
node = list.Last;
while (node != null) {
Console.WriteLine(node.Value);
node = node.Previous;
}
}
}
ผลลัพธ์
Forward traversal:
First
Tim
Tom
Manual traversal with nodes:
First
Tim
Tom
Backward traversal:
Tom
Tim
First
เมธอดหลักของ LinkedList<T>
| เมธอด | คำอธิบาย | Complexity |
|---|---|---|
| AddFirst(T) | เพิ่มที่หัว | O(1) |
| AddLast(T) | เพิ่มที่ท้าย | O(1) |
| AddBefore(Node, T) | เพิ่มก่อนโหนดที่กำหนด | O(1) |
| AddAfter(Node, T) | เพิ่มหลังโหนดที่กำหนด | O(1) |
| Remove(T) / Remove(Node) | ลบค่า/โหนด | O(1) ถ้ามี Node, O(n) ถ้าค้นหา |
| Find(T) | ค้นหาโหนดแรกที่มีค่าเท่ากัน | O(n) |
เมื่อไหร่ควรใช้ LinkedList
- ต้องการเพิ่ม/ลบบ่อยที่หัว/ท้าย/กลาง (โดยมี reference โหนด)
- ไม่ต้องการ random access (ไม่มี indexer)
- ข้อมูลมีขนาดใหญ่และเปลี่ยนแปลงบ่อย
- ส่วนใหญ่ใน .NET ใช้
List<T>แทนได้ เพราะ cache-friendly และเร็วกว่าสำหรับการใช้งานทั่วไป