在链接列表中查找元素 - C++

Finding an Element in a LinkedList - C++

本文关键字:元素 C++ 查找 链接 列表      更新时间:2023-10-16

我正在尝试编写一个函数find(Node* node,int valueInput(,该函数从给定节点开始,并返回值为valueInput的节点索引,如果valueInput不存在,则返回-1。

这是代码

#include <iostream>
class Node {
public:
int value;
Node* next = NULL;
};
int find(Node* node, int valueInput)
{
Node* tempNode = node;
int count = 0;
while (tempNode != NULL)
{
if (tempNode->value == 0)
{
break;
}
++count;
tempNode = tempNode->next;
}
return -1;
}
int main()
{
int valueInput, currentValue;
int listValues;
char arrow;
Node* node1, * previous, * head;
std::cin >> valueInput;
std::cin >> currentValue;
node1 = new Node();
node1->value = currentValue;
node1->next = NULL;
previous = node1;
head = node1;
while (std::cin)
{
std::cin >> arrow;
std::cin >> arrow;
std::cin >> currentValue;
node1 = new Node();
node1->value = currentValue;
previous->next = node1;
previous = node1;
}
std::cout << find(head, valueInput);
}

目前,我的程序总是返回 -1 示例输入和输出:

示例输入: 5 1->2->5

示例输出: 阿拉伯数字

这是因为您的代码只有一个return -1语句。你应该return count而不是break.此外,您总是与0进行比较,而不是valueInput

int find(Node* node, int valueInput)
{
Node* tempNode = node;
int count = 0;
while (tempNode != nullptr)
{
if (tempNode->value == valueInput)
{
return count;
}
++count;
tempNode = tempNode->next;
}
return -1;
}

您还应该使用nullptr而不是NULL