创建一个函数,返回c++中链表的值

Create function that returns the value of a linked list in c++

本文关键字:c++ 返回 链表 函数 一个 创建      更新时间:2023-10-16

如果有人能帮我找出这段代码的问题,我将不胜感激。我试图创建一个函数getIth(int n),返回列表中node n的值,但它不起作用,我不知道为什么。

node.h
template<typename T>

class Node
{
    public:
        T nValue;
        Node<T> *next;
        Node<T> *before;
        Node(T a)
        {
            nValue = a;
        }                                                                                                                
};

linked_list.h

#include "node.h"                                                                                                                                                                                           
#ifndef NULL
#define NULL = 0
#endif
template <typename T>
class LinkedList
{
    private:
       Node<T> *head;
       Node<T> *last;
    public:
        LinkedList()
        {
            T value = -1;
            head = new Node<T>(value);
            head->next = NULL;
            last = new Node<T>(value);
            last->before = NULL;
        }
        T getIth(int n)
        {
            int contador = 0;
            T value = -1;
            Node<T> *tempNode = new Node<T>(value);
            tempNode = last;
            while(tempNode->next != NULL)
            {
                contador = contador + 1;
                if(contador == n)
                {
                    value = tempNode->nValue;
                }
                tempNode->next = tempNode;
            }
            return value; 
       }
}  

您的代码有很多错误,但最大的错误是

T getIth(int n){
    ...
    while (tempNode->next != NULL)
    {
        ...
        tempNode->next = tempNode;
    }
}  

你应该在周围用另一种方式

T getIth(int n){
    ...
    while (tempNode->next != NULL)
    {
        ...
        tempNode = tempNode->next;
    }
}  

请记住,您试图使tempNode指向下一个节点,而不是使下一个结点指向tempNode

另一个错误在这里

Node<T> *tempNode = new Node<T>(value);
tempNode = last;

首先使tempNode指向一个新节点,然后使tempNode指向last。显然,这是在浪费时间(和内存)。只要使tempNode指向last,就根本不需要新节点。

Node<T> *tempNode = last;

修复这些错误,你会更接近,但我认为可能还有更多的错误需要修复。