Địa chỉ giống nhau của 2 danh sách liên kết

#include <iostream>
#include <limits>
using namespace std;
class SinglyLinkedListNode {
    public:
        int data;
        SinglyLinkedListNode *next;
        SinglyLinkedListNode(int node_data) {
            this->data = node_data;
            this->next = nullptr;
        }
};
class SinglyLinkedList {
    public:
        SinglyLinkedListNode *head;
        SinglyLinkedListNode *tail;
        SinglyLinkedList() {
            this->head = nullptr;
            this->tail = nullptr;
        }
        void insert_node(int node_data) {
            SinglyLinkedListNode* node = new SinglyLinkedListNode(node_data);
            if (!this->head) {
                this->head = node;
            } else {
                this->tail->next = node;
            }
            this->tail = node;
        }
        void printLinkedList() {
            SinglyLinkedListNode* p;
            p = head;
            while (p != NULL){
                cout<<p->data<<endl;
                p = p->next;
            }
        }
};
// Complete the SinglyLinkedListNode* findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) function below.
/*
     * For your reference:
     *
     * SinglyLinkedListNode {
     *     int data;
     *     SinglyLinkedListNode* next;
     * };
     * SinglyLinkedList {
     *    SinglyLinkedListNode *head;
     *    SinglyLinkedListNode *tail;
     *
     */
SinglyLinkedListNode* findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
//###INSERT CODE HERE -
}
void free_singly_linked_list(SinglyLinkedListNode* node) {
    while (node) {
        SinglyLinkedListNode* temp = node;
        node = node->next;
        free(temp);
    }
}
int main()
{
    SinglyLinkedList* llist1 = new SinglyLinkedList();
    SinglyLinkedList* llist2 = new SinglyLinkedList();
    int llist_count;
    int x;
    cin >> llist_count;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    for (int i = 0; i < llist_count; i++) {
        int llist_item;
        cin >> llist_item;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        llist1->insert_node(llist_item);
    }
    cin >> llist_count;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    for (int i = 0; i < llist_count; i++) {
        int llist_item;
        cin >> llist_item;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        llist2->insert_node(llist_item);
    }
    cin >> llist_count;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    if (llist_count>0){
        int llist_item;
        cin >> llist_item;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        llist1->insert_node(llist_item);
        if (llist2->head != nullptr)  llist2->tail->next = llist1->tail;
        else llist2->head = llist2->tail = llist1->tail;
    }
    for (int i = 1; i < llist_count; i++) {
        int llist_item;
        cin >> llist_item;
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        llist1->insert_node(llist_item);
    }
    llist2->tail = llist1->tail;
    SinglyLinkedListNode* p;
    p = findMergeNode(llist1->head,llist2->head);
    if (p == nullptr)
        cout<<"NA";
    else
        cout<<p->data;
    //free_singly_linked_list(llist1->head);
    //free_singly_linked_list(llist2->head);
    return 0;
}

Ở trên là đề bài còn ở dưới là đoạn viết sẵn, cần hoàn thành ở khúc “insert code here”.
Em không biết ý tưởng nên làm như thế nào vì khác với GIÁ TRỊ thì cái cần tìm là ĐỊA CHỈ giống nhau.
Mn cho em xin hướng đi với ạ


ý tưởng của em như thế này nhưng vẫn có lỗi sai khi nộp bài nên không biết phải chỉnh lại ntn

cần reset p2 về head2 lại cho mỗi phần tử trong p1 chứ :hocho:

1 Like

Bạn có thể giải thích rõ hơn được không ạ, mình mới học đến phần này nên chưa hiểu lắm

vd p1=1->2->3->null, p2=11->22->33->null thì p1 trỏ tới 1 thì p2 chạy từ 11 22 33 rồi null, vậy là so sánh 1 với 11, 22, 33. Sau đó p1 trỏ tới 2 thì p2 vẫn trỏ tới null, chả so sánh gì cả :hocho: cần trỏ p2 lại về với 11 chứ

1 Like

À mình hiểu r, cảm ơn bạn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?