Найти точку слияния двух связанных списков? - PullRequest
0 голосов
/ 19 сентября 2018

** Hii Я пытаюсь решить этот хакерранковый вопрос, но получаю ошибку времени выполнения "ошибка сегментации".

Пожалуйста, помогите мне исправить эту ошибку.

Ссылка на вопрос **= https://www.hackerrank.com/challenges/find-the-merge-point-of-two-joined-linked-lists/problem

int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {

int length1 = 0;
int length2 = 0;

SinglyLinkedListNode* list1 = head1;
SinglyLinkedListNode* list2 = head2;

while(list1 != nullptr)
{
    list1 = list1->next;
    length1 ++;
}
while(list2 != nullptr)
{
    list2 = list2 -> next;
    length2 ++;
}

//I want to point list2 pointer to the largest list 
if(length1 > length2)
{
    SinglyLinkedListNode* temp = list1;
    list1 = list2;
    list2 = temp;     
}

for(int i=0 ; i< abs(length1 - length2) ;i++)
{
    list2 =list2 -> next;
}

while(list2 != list1)
{
    list1 = list1->next;
    list2 = list2->next;

}

return list1->data;

Ошибка = Я получаю ошибку "Ошибка сегментации".

1 Ответ

0 голосов
/ 29 сентября 2018

Ваш метод подхода в порядке.но после определения длины двух списков list1 и list2 будут указывать на ноль.Не возвращая списки соответствующим заголовкам, вы переходите с помощью следующих указателей.

list1 = head1;list2 = head2;

Установите их в заголовки перед тем, как установить самый большой список в list2.

...