【问题标题】:Concatenating two Linked Lists using operator overloading C++使用运算符重载 C++ 连接两个链表
【发布时间】:2021-09-04 09:58:13
【问题描述】:

我想使用运算符重载连接两个链接列表。过去几个小时我一直在尝试,但没有结果。

我正在尝试创建一个单独的函数用于连接,稍后我将在运算符重载中使用它。这是我目前所拥有的。

列表定义

struct Node
{
    int info;
    Node* link;
};

class LinkList
{
public:
    Node* head;
    LinkList()
    {
      head = NULL;
    }
 
    void Append(int num);
    void Insert(int num, int position);
    void Print();
    void Delete(int position);
    void concatenate(LinkList list1, LinkList list2);
};

附加函数

void LinkList::Append(int num) // Creates a new node
{
    Node* newNode = new Node();
      
    newNode->info = num;
    newNode->link = NULL; 
      
    if(head == NULL)
    {
        head = newNode;
    }
        
    else
    {
        Node* temp = head;
        while(temp->link != NULL)
        {
            temp = temp->link;
        }
            
    temp->link = newNode;
    }    
}
 

连接函数

void concatenate(LinkList list1, LinkList list2)
{
    LinkList list3;
    
    Node* ptr1 = list1.head;
    Node* ptr2 = list2.head;
    while(ptr1->link!=NULL)
    {
        list3.Append(ptr1->info);
        ptr1 = ptr1->link;
    }
    while(ptr2->link!=NULL)
    {
        list3.Append(ptr2->info);
        ptr2 = ptr2->link;
    }
    list3.Print();
}

我收到 [错误] id 返回 1 个退出状态。你能帮我纠正一下吗? (如果有人可以将它作为运算符重载的一部分直接实现,我将不胜感激)

【问题讨论】:

  • 请提供reproducible example
  • 请将错误信息添加到您的帖子中。
  • concatenate(LinkList list1, LinkList list2);这个操作真的需要三个链表吗?
  • 您遇到的至少一个问题是while 条件。使用while (ptr1)while(ptr2) 而不是你写的。
  • void LinkList::Append void concatenate其中一个与另一个不同。

标签: c++ class pointers linked-list operator-overloading


【解决方案1】:

在连接函数中使用LinkList& 而不是LinkList 或在类中实现复制构造函数

【讨论】:

    【解决方案2】:

    感谢大家抽出宝贵的时间回答...这是解决方案:

    LinkList LinkList::operator+(const LinkList& list2)
    {
        LinkList list3;
        
        Node* ptr1 = head;
        Node* ptr2 = list2.head;
        
        while(ptr1!=NULL)
        {
            list3.Append(ptr1->info);
            ptr1 = ptr1->link;
        }
        while(ptr2!=NULL)
        {
            list3.Append(ptr2->info);
            ptr2 = ptr2->link;
        }
        list3.Print();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2023-03-24
      • 2011-12-03
      相关资源
      最近更新 更多