【问题标题】:Find merge point of two linked list?找到两个链表的合并点?
【发布时间】:2018-09-19 13:15:56
【问题描述】:

**嗨,我正在尝试解决这个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;

错误 = 我收到“分段错误”错误。

【问题讨论】:

  • 欢迎来到 SO。这里的问题应该是完整的,并且包含理解它所需的所有内容,而无需参考其他网站。请参阅 How to Askminimal reproducible example。此时,您应该在您的问题中发布问题(编辑它)。然后要调试分段错误,请阅读cprogramming.com/debugging/segfaults.html 或其他网站和教程,向您展示如何做到这一点。将问题缩小到一段代码后,您可以编辑您的问题,让我们知道问题所在。

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


【解决方案1】:

你的方法很好。但在找到两个列表的长度后,list1 和 list2 将指向 null。如果不将列表重置为各自的头部,您将使用下一个指针进行遍历。

list1 = head1; list2 = head2;

在将最大列表设置为 list2 之前将它们设置为头部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2021-02-26
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多