Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

LinkedList Traversal ใน C#: การวนลูปผ่าน LinkedList

ภาพรวม

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 และเร็วกว่าสำหรับการใช้งานทั่วไป