Có lẽ tôi đã quá đơn giản hóa điều này, nhưng chỉ cần lặp lại danh sách nhỏ nhất và sử dụng các nút cuối cùng Link
làm điểm hợp nhất?
Vì vậy, đâu Data->Link->Link == NULL
là điểm kết thúc, cho Data->Link
là điểm hợp nhất (ở cuối danh sách).
BIÊN TẬP:
Được rồi, từ hình ảnh bạn đã đăng, bạn phân tích cú pháp hai danh sách, danh sách nhỏ nhất đầu tiên. Với danh sách nhỏ nhất, bạn có thể duy trì các tham chiếu đến nút sau. Bây giờ, khi bạn phân tích cú pháp danh sách thứ hai, bạn thực hiện so sánh trên tham chiếu để tìm nơi Tham chiếu [i] là tham chiếu tại LinkedList [i] -> Liên kết. Điều này sẽ cho điểm hợp nhất. Thời gian để giải thích bằng hình ảnh (chồng các giá trị trên hình lên OP).
Bạn có một danh sách được liên kết (các tham chiếu được hiển thị bên dưới):
A->B->C->D->E
Bạn có một danh sách được liên kết thứ hai:
1->2->
Với danh sách đã hợp nhất, các tham chiếu sau đó sẽ đi như sau:
1->2->D->E->
Do đó, bạn lập bản đồ danh sách "nhỏ hơn" đầu tiên (vì danh sách đã hợp nhất, danh sách mà chúng tôi đang đếm có độ dài là 4 và danh sách chính là 5)
Lặp qua danh sách đầu tiên, duy trì một tham chiếu các tài liệu tham khảo.
Danh sách sẽ bao gồm các tài liệu tham khảo sau Pointers { 1, 2, D, E }
.
Bây giờ chúng ta đi qua danh sách thứ hai:
-> A - Contains reference in Pointers? No, move on
-> B - Contains reference in Pointers? No, move on
-> C - Contains reference in Pointers? No, move on
-> D - Contains reference in Pointers? Yes, merge point found, break.
Chắc chắn, bạn duy trì một danh sách con trỏ mới, nhưng điều đó không nằm ngoài thông số kỹ thuật. Tuy nhiên, danh sách đầu tiên được phân tích cú pháp chính xác một lần và danh sách thứ hai sẽ chỉ được phân tích cú pháp hoàn toàn nếu không có điểm hợp nhất. Nếu không, nó sẽ kết thúc sớm hơn (tại điểm hợp nhất).