1. 程式人生 > >怎麼判斷兩個連結串列是否有merge?如果有:在哪?

怎麼判斷兩個連結串列是否有merge?如果有:在哪?

Abstact

刷OJ時,遇到一個題:判斷兩個連結串列是否有merge?如果有?在哪?如下圖:merge point在值為3的地方。
在這裡插入圖片描述
在StackOverflow上一個回答特別棒:check if two linked lists merge
現在記錄下來。

Algorithm

演算法很簡單:同時遍歷兩個連結串列。設右邊為current1(對應第一條連結串列),current2(對應第二條連結串列)。當current1到盡頭後,使current1遍歷第二條連結串列。同樣當current2到盡頭後:使其遍歷第一條連結串列。
在第二次遍歷時:current1==current2:此時是merge point。否則沒有merge point。

Why

在這裡插入圖片描述

Implement

int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
    SinglyLinkedListNode* current1=head1,*current2 = head2;   
    while(current1 !=current2){
        if(current1->next ==nullptr)
            current1=head2;
        else
            current1=current1-
>next; if (current2->next == nullptr) current2 = head1; else current2 = current2->next; } return current1->data; }