两个排序的链接列表C 的交点

Intersection of two Sorted Linked Lists C++

本文关键字:链接 列表 排序 两个      更新时间:2023-10-16

我的相交方法有一些麻烦。它可以正常工作,但是在程序结束后,它会造成错误。这是我的代码:

void SortedLinkedList::intersection(SortedLinkedList finalList, SortedLinkedList list1, SortedLinkedList list2) {
        Node *pointer1 = list1.first;
        Node *pointer2 = list2.first;
        int counter = 0;
        while (pointer1 != NULL && pointer2 != NULL) {
            if (pointer1->data < pointer2->data) {
                pointer1 = pointer1->next;
            }
            else if (pointer2->data < pointer1->data){
                pointer2 = pointer2->next;
            }
            else if (pointer1->data == pointer2->data){
                finalList.addItem(pointer1->data);
                pointer1 = pointer1->next;
                pointer2 = pointer2->next;
            }
        }
        finalList.printList();
    }

我需要在第三个列表中获得两个列表的交集。

主要眩光错误: SortedLinkedList finalist您必须在该类中更改值,这是您的输出数据结构。您必须通过引用将其传递,否则将永远不会更改该功能的实际列表。

在某些情况下,您也希望通过" const"声明符进行其他输入数据参考,您必须仅使用来自它们的const方法。由于您实际上不使用任何方法,Andyour类相对简单,这并不重要

void SortedLinkedList::intersection(SortedLinkedList& finalList, 
                  const SortedLinkedList& list1,
                  const SortedLinkedList& list2) 

其他任何事物都没有看到班级的整个设计将是猜测。问题可能是在您的添加剂方法中或缺乏班级字段的初始化。

标准库为std :: set_intersection提供一种方法

它精确地合并到排序的容器中。

这是从链接中获取的片段:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
  std::vector<int> v1{1,2,3,4,5,6,7,8};
  std::vector<int> v2{        5,  7,  9,10};
  std::sort(v1.begin(), v1.end());
  std::sort(v2.begin(), v2.end());
  std::vector<int> v_intersection;
  std::set_intersection(v1.begin(), v1.end(),
                        v2.begin(), v2.end(),
                        std::back_inserter(v_intersection));
  for(int n : v_intersection)
    std::cout << n << ' ';
}

在链接中,您还会找到一些可能的实现。但是,我的建议是:"不要重新发明轮子,只要重新调整它"。