2.04 ✅ Danh sách liên kết (Linked List)

  • Khéo léo dựng nút đầu giả (dummy head / sentinel node) để giúp logic duyệt/xử lý thống nhất và dễ viết hơn.
  • Linh hoạt dùng đệ quy (recursion): xây dựng điều kiện dừng/điều kiện chuyển, đệ quy có thể giúp giải bài rất “gọn”. Tuy nhiên cần chú ý: có bài không nên dùng đệ quy vì độ sâu quá lớn có thể gây TLE hoặc tràn ngăn xếp (stack overflow).
  • Đảo ngược một đoạn trong danh sách liên kết. Bài 92.
  • Tìm nút giữa (middle node) của danh sách liên kết. Bài 876. Tìm nút thứ n từ cuối (nth node from the end). Bài 19. Chỉ cần 1 lần duyệt là ra đáp án.
  • Gộp K danh sách liên kết đã sắp xếp (merge k sorted lists). Bài 21, 23.
  • Phân nhóm/phân loại danh sách liên kết. Bài 86, 328.
  • Sắp xếp danh sách liên kết với yêu cầu thời gian O(nlogn)O(n \log n), bộ nhớ O(1)O(1). Cách điển hình là sắp xếp trộn (merge sort), trộn từ trên xuống (top-down merge). Bài 148.
  • Kiểm tra danh sách liên kết có chu trình (cycle) hay không; nếu có, tìm điểm vào chu trình (cycle entry / intersection point). Đồng thời kiểm tra 2 danh sách liên kết có giao nhau (intersection) hay không; nếu có, tìm nút giao (intersection node). Các bài: 141, 142, 160.
STTTiêu đềLời giảiĐộ khóĐộ phức tạp thời gianĐộ phức tạp bộ nhớYêu thíchTỷ lệ AC (Acceptance)
0002Cộng hai số (Add Two Numbers)GoMediumO(n)O(1)40.4%
0019Xóa nút thứ N từ cuối danh sách (Remove Nth Node From End of List)GoMediumO(n)O(1)41.1%
0021Gộp hai danh sách đã sắp xếp (Merge Two Sorted Lists)GoEasyO(log n)O(1)62.5%
0023Gộp k danh sách đã sắp xếp (Merge k Sorted Lists)GoHardO(log n)O(1)❤️49.8%
0024Đổi chỗ các nút theo cặp (Swap Nodes in Pairs)GoMediumO(n)O(1)61.3%
0025Đảo các nút theo nhóm k (Reverse Nodes in k-Group)GoHardO(log n)O(1)❤️54.7%
0061Xoay danh sách liên kết (Rotate List)GoMediumO(n)O(1)36.1%
0082Xóa phần tử trùng trong danh sách đã sắp xếp II (Remove Duplicates from Sorted List II)GoMediumO(n)O(1)45.9%
0083Xóa phần tử trùng trong danh sách đã sắp xếp (Remove Duplicates from Sorted List)GoEasyO(n)O(1)50.6%
0086Phân hoạch danh sách (Partition List)GoMediumO(n)O(1)❤️52.0%
0092Đảo danh sách liên kết II (Reverse Linked List II)GoMediumO(n)O(1)❤️45.4%
0109Chuyển danh sách đã sắp xếp thành cây nhị phân tìm kiếm (Convert Sorted List to Binary Search Tree)GoMediumO(log n)O(n)60.2%
0114Làm phẳng cây nhị phân thành danh sách liên kết (Flatten Binary Tree to Linked List)GoMedium61.8%
0116Gán con trỏ next sang phải cho mỗi nút (Populating Next Right Pointers in Each Node)GoMedium60.4%
0138Sao chép danh sách với con trỏ ngẫu nhiên (Copy List with Random Pointer)GoMedium51.4%
0141Chu trình trong danh sách liên kết (Linked List Cycle)GoEasyO(n)O(1)❤️47.5%
0142Chu trình trong danh sách liên kết II (Linked List Cycle II)GoMediumO(n)O(1)❤️48.8%
0143Sắp xếp lại danh sách (Reorder List)GoMediumO(n)O(1)❤️52.6%
0146Bộ nhớ đệm LRU (LRU Cache)GoMedium40.7%
0147Sắp xếp chèn danh sách liên kết (Insertion Sort List)GoMediumO(n)O(1)❤️51.1%
0148Sắp xếp danh sách (Sort List)GoMediumO(n log n)O(n)❤️55.1%
0160Giao nhau của hai danh sách liên kết (Intersection of Two Linked Lists)GoEasyO(n)O(1)❤️54.4%
0203Xóa các phần tử khỏi danh sách liên kết (Remove Linked List Elements)GoEasyO(n)O(1)46.0%
0206Đảo danh sách liên kết (Reverse Linked List)GoEasyO(n)O(1)73.6%
0234Danh sách liên kết đối xứng (Palindrome Linked List)GoEasyO(n)O(1)50.2%
0237Xóa nút trong danh sách liên kết (Delete Node in a Linked List)GoMediumO(n)O(1)76.0%
0328Danh sách liên kết lẻ/chẵn (Odd Even Linked List)GoMediumO(n)O(1)61.3%
0382Nút ngẫu nhiên trong danh sách liên kết (Linked List Random Node)GoMedium62.8%
0445Cộng hai số II (Add Two Numbers II)GoMediumO(n)O(n)59.6%
0460Bộ nhớ đệm LFU (LFU Cache)GoHard43.0%
0622Thiết kế hàng đợi vòng tròn (Design Circular Queue)GoMedium51.5%
0705Thiết kế HashSet (Design HashSet)GoEasy65.6%
0706Thiết kế HashMap (Design HashMap)GoEasy64.7%
0707Thiết kế danh sách liên kết (Design Linked List)GoMediumO(n)O(1)27.7%
0725Chia danh sách liên kết thành các phần (Split Linked List in Parts)GoMediumO(n)O(1)57.2%
0817Các thành phần của danh sách liên kết (Linked List Components)GoMediumO(n)O(1)57.7%
0876Nút giữa của danh sách liên kết (Middle of the Linked List)GoEasyO(n)O(1)❤️75.7%
1019Nút lớn hơn kế tiếp trong danh sách liên kết (Next Greater Node In Linked List)GoMediumO(n)O(1)59.9%
1171Xóa các nút liên tiếp có tổng bằng 0 (Remove Zero Sum Consecutive Nodes from Linked List)GoMedium43.2%
1290Chuyển số nhị phân trong danh sách liên kết thành số nguyên (Convert Binary Number in a Linked List to Integer)GoEasy82.1%
1669Gộp xen giữa các danh sách liên kết (Merge In Between Linked Lists)GoMedium73.7%
1670Thiết kế hàng đợi trước-giữa-sau (Design Front Middle Back Queue)GoMedium57.2%
1721Hoán đổi các nút trong danh sách liên kết (Swapping Nodes in a Linked List)GoMedium67.1%
2181Gộp các nút giữa các số 0 (Merge Nodes in Between Zeros)GoMedium86.3%
--------------------------------------------------------------------------------------------------------------