合并两个排序的链表。编写一个包含两个列表的SortedMerge()函数,

时间:2019-02-01 17:32:05

标签: c++

合并两个排序的链表 编写一个SortedMerge()函数,该函数接受两个列表,每个列表按升序排序,然后将两个列表合并为一个列表,该列表按升序排序。 SortedMerge()应该返回新列表。新列表应通过拼接制成 前两个列表的节点。

运行时错误: 运行时错误分段错误(SIGSEGV) 了解有关段故障的更多信息

Node* SortedMerge(Node* head1,   Node* head2)
{
    struct Node *result;
   // Node *temp;
   if(head1==NULL)
      return head2;
  if(head2==NULL)
     return head1;
  if(head1->data<=head2->data)
  {
      result->data=head1->data;
     //result=head1;
      result->next=SortedMerge( head1->next,   head2);

  }
  else if(head1->data>head2->data)
  {
       result->data=head2->data;
      //     result=head2;
      result->next=SortedMerge( head1,   head2->next);


  }

  else
  {
      return NULL;

  }





    return result;
    // Your Code Here
}

可能会出现细分错误。为什么?

2 个答案:

答案 0 :(得分:0)

此行“结构节点*结果;”应该是“ struct Node * result = new Node;”。它应该可以解决您的问题

答案 1 :(得分:0)

您要取消引用未初始化的指针。

您的方向正确,但是该函数应根据其值返回head1head2,而不应复制任何data

Node* SortedMerge(Node* head1, Node* head2)
{
   if(head1==NULL)
      return head2;
  if(head2==NULL)
     return head1;
  if(head1->data<head2->data)
  {
      head1->next=SortedMerge(head1->next, head2);
      return head1;
  }
  else
  {
      head2->next=SortedMerge(head1, head2->next);
      return head2;
   }
}