查找两个链表的合并点?

时间:2018-09-19 13:15:56

标签: c++ linked-list segmentation-fault

** Hii我正在尝试解决这个hackerrank问题,但是我遇到运行时错误“分段错误”。

请帮助我解决此错误。

问题链接** = 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 :(得分:0)

您的方法很好。但是找到两个列表的长度后,list1和list2将指向null。无需将列表重置为各自的标题,即可遍历下一个指针。

  

list1 = head1; list2 = head2;

在将最大列表设置为list2之前,将它们设置为heads。