Giới thiệu
Để lấy nút đầu tiên (first node) của LinkedList<T>, sử dụng thuộc tính First trả về LinkedListNode<T>. Truy cập giá trị qua First.Value.
Ví dụ 1: LinkedList chuỗi cơ bản
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
LinkedList list = new LinkedList();
list.AddLast("A");
list.AddLast("B");
list.AddLast("C");
list.AddLast("D");
list.AddLast("E");
list.AddLast("F");
list.AddLast("G");
list.AddLast("H");
list.AddLast("I");
list.AddLast("J");
Console.WriteLine("Số lượng nút = " + list.Count);
Console.WriteLine("Nút đầu tiên (First) = " + list.First.Value);
list.Clear();
Console.WriteLine("Số lượng nút (sau Clear) = " + list.Count);
}
}
Đầu ra ví dụ 1
Số lượng nút = 10 Nút đầu tiên (First) = A Số lượng nút (sau Clear) = 0
Ví dụ 2: LinkedList số nguyên với First và Last
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
LinkedList list = new LinkedList();
list.AddLast(100);
list.AddLast(200);
list.AddLast(300);
list.AddLast(400);
list.AddLast(500);
list.AddLast(600);
list.AddLast(700);
list.AddLast(800);
list.AddLast(900);
list.AddLast(1000);
Console.WriteLine("Số lượng nút = " + list.Count);
Console.WriteLine("Nút đầu tiên (First) = " + list.First.Value);
Console.WriteLine("Nút cuối cùng (Last) = " + list.Last.Value);
list.Clear();
Console.WriteLine("Số lượng nút (sau Clear) = " + list.Count);
}
}
Đầu ra ví dụ 2
Số lượng nút = 10 Nút đầu tiên (First) = 100 Nút cuối cùng (Last) = 1000 Số lượng nút (sau Clear) = 0
Các thuộc tính và phương thức liên quan đến Node
| Thành viên | Kiểu trả về | Mô tả |
|---|---|---|
| First | LinkedListNode<T> | Nút đầu tiên (head), null nếu rỗng |
| Last | LinkedListNode<T> | Nút cuối cùng (tail), null nếu rỗng |
| AddFirst(T) | LinkedListNode<T> | Thêm nút ở đầu, trả về nút mới |
| AddLast(T) | LinkedListNode<T> | Thêm nút ở cuối, trả về nút mới |
| AddAfter(node, T) | LinkedListNode<T> | Thêm sau nút chỉ định |
| AddBefore(node, T) | LinkedListNode<T> | Thêm trước nút chỉ định |
| RemoveFirst() | void | Xóa nút đầu |
| RemoveLast() | void | Xóa nút cuối |
| Remove(node) | bool | Xóa nút cụ thể |
| Find(T) | LinkedListNode<T> | Tìm nút đầu tiên có giá trị T |
| FindLast(T) | LinkedListNode<T> | Tìm nút cuối cùng có giá trị T |
Cấu trúc LinkedListNode<T>
public sealed class LinkedListNode<T> {
public LinkedList<T> List { get; } // List chứa node này
public LinkedListNode<T> Next { get; } // Nút kế tiếp (null nếu tail)
public LinkedListNode<T> Previous { get; } // Nút trước (null nếu head)
public T Value { get; set; } // Giá trị lưu trữ
}
Lưu ý quan trọng
- Nếu list rỗng (
Count == 0),FirstvàLasttrả vềnull. Truy cập.Valuesẽ némNullReferenceException. LinkedList<T>là double-linked list (danh sách liên kết đôi).- Không hỗ trợ truy cập bằng index (không có
[]). Duyệt quaforeachhoặc nodeNext/Previous. - Insert/Remove ở giữa O(1) nếu đã có reference đến node (khác List O(n)).
- Không có
Capacity, mở rộng tự động.
Ứng dụng thực tế
- LRU Cache: di chuyển node truy cập gần nhất lên First.
- Undo/Redo: duyệt Previous/Next.
- Playlist, browser history: điều hướng qua lại.
- Memory pool, free list management.