【问题标题】:Trouble with linked list implementation in C++C++中链表实现的问题
【发布时间】:2020-02-25 06:12:08
【问题描述】:

我被期望在 C++ 中为分配创建一个链表,但我在使用一种特定方法时遇到了很多麻烦。

#include "myLList.h"
#include "Datum.h"
#include <stddef.h>

myLList::myLList()
{
    head = curr = tail = NULL;
}

myLList::myLList(float arr[])
{
    if(arr[0] = NULL);
        exit(0);
    int arrayLength = sizeof(arr)/sizeof(arr[0]);

    Datum *temp = new Datum(arr[0]);
    head = temp;
    tail = temp;

    for(int i = 1; i < arrayLength; i++)
    {
        insertAtEnd(arr[i]);
    }

}

void myLList::insertAtEnd(float value)
{
    Datum *temp = new Datum(value);
    if(head == NULL)
    {
        head = temp;
        tail = head;
        temp = NULL;
    }
    else
    {
        tail->setNext(*temp);
        tail = temp;
    }
}

Datum myLList::operator[](int index)
{
    Datum *temp = head;
    for(int i = 0; i++; i < index)
    {
        temp = temp->getNext();
    }
    return temp->getData();
}


void myLList::insert(int index, float value)
{
    Datum *temp = new Datum(value);
    curr = head;
    Datum *prev = curr;

    for(int i = 1; i < index; i++)
    {
        prev = curr;
        curr = curr->getNext();
    }

    prev->setNext(*temp);
    temp->setNext(*curr);
}


myLList::~myLList()
{
    //dtor
}

在使用以下 main.cpp 测试 insertAtEnd 和重载 [] 方法时:

#include <iostream>
#include "Datum.h"
#include "myLList.h"
#include <stddef.h>


using namespace std;

int main()
{
 myLList linkedList = myLList();

    linkedList.insertAtEnd(1);
    linkedList.insertAtEnd(2);
    linkedList.insertAtEnd(3);

    cout << "third element: " << linkedList[2].getData() << endl;
}

无论我将什么索引推入重载的 [] 运算符,输出只是linkedList 头部的值。任何帮助将不胜感激

【问题讨论】:

  • 您是否尝试过调试您的代码?在代码中的哪一行,期望值与实际值不同?
  • 请提供包含 setNext 定义的minimal reproducible example。我认为你应该指向 setNext,而不是值。

标签: c++ linked-list operator-overloading singly-linked-list


【解决方案1】:

在您的函数内部重载 [] 运算符:

改变这个:

for(int i = 0; i++; i < index)
{
    temp = temp->getNext();
}

到这里:

for(int i = 0; i < index; i++)
{
    temp = temp->getNext();
}

【讨论】:

  • 乐于助人。请考虑接受我的回答:)。
  • @anteater7645 警告:如果索引大于列表的长度,程序将进入未定义行为的神奇领域。在那之后,任何事情都可能发生,最糟糕的是程序看起来可以正常工作。可能想要测试 temp == NULL 并在发生时抛出一个信息异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
相关资源
最近更新 更多