gpt4 book ai didi

c++ - 从双向链表类打印单个节点

转载 作者:行者123 更新时间:2023-11-28 02:53:46 25 4
gpt4 key购买 nike

我正在尝试实现三种方法,目前是 get_first()、get_last() 和 print_node()。 get_first() 将返回列表的头部,get_last() 返回尾部,而 print_node() 将只打印发送给它的节点的数据字段。我正在尝试实现,但我所做的任何更改都会不断出现指针错误。

这是我的 node.h header :

class Node
{
private:
int data;
Node *next;
Node *prev;
friend class LinkedList;
};

class LinkedList
{
private:
Node *head;
Node *tail;

public:
LinkedList();
~LinkedList();

bool empty();

void insert_left(int v);
void insert_right(int v);
Node* get_first();
Node* get_last();
void print_list();
void print_node(Node *n);
void remove_left();
void remove_right();


protected:
void add(Node *v, int d);
void remove(Node *v);
};

这里是我的 list.cpp 类实现文件的相关部分:

#include <iostream>
#include "node.h"
using namespace std;

LinkedList :: LinkedList()
{
head = new Node;
tail = new Node;

head->next = tail;
tail->prev = head;
}

LinkedList :: ~LinkedList()
{
while(!empty())
{
remove_left();
}
delete head;
delete tail;
}

void LinkedList :: add(Node *v, int d)
{
Node *u = new Node;
u->data = d;
u->next = v;
u->prev = v->prev;
v->prev->next = v->prev = u;
}

void LinkedList :: print_list()
{
Node *tmp = head;
while(tmp != NULL)
{
cout << tmp->data << endl;
tmp = tmp->next;
}
}

void LinkedList :: print_node(Node *n)
{
Node *tmp = n;
cout << tmp->data << endl;
}

Node LinkedList :: get_first()
{
return head;
}

Node LinkedList :: get_last()
{
return tail;
}

最后,这是我在名为 main.cpp 的文件中的主要功能:

#include <cstdlib>
#include <iostream>
#include "list.cpp"
using namespace std;

int main(int agrc, char **argv)
{
LinkedList *l = new LinkedList();
//LinkedList *m = new LinkedList();

l->insert_left(200);
l->insert_left(700);
l->insert_left(300);

Node *temp = l->get_first();
//l->print_list();

l->print_node(temp);

delete l;

return 0;
}

这是当前的错误输出:

g++ main.cpp -o main
In file included from main.cpp:3:
list.cpp:85: error: prototype for ‘Node LinkedList::get_first()’ does not match any in class ‘LinkedList’
node.h:24: error: candidate is: Node* LinkedList::get_first()
list.cpp:90: error: prototype for ‘Node LinkedList::get_last()’ does not match any in class ‘LinkedList’
node.h:25: error: candidate is: Node* LinkedList::get_last()
make: *** [main] Error 1

我不确定要进行的确切更改,但我认为这与我在 get_first() 和 last() 函数中返回头部的方式有关。请原谅帖子的长度。

最佳答案

您在函数声明中返回 Node*,但在定义中您将 Node 作为返回类型。用这个

Node* LinkedList :: get_first()
{
return head;
}

Node* LinkedList :: get_last()
{
return tail;
}

关于c++ - 从双向链表类打印单个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com