我知道如何表示链接列表的方式基本上是创建一个 Node 类(更好的是 struct ),并创建实际的 linkedList 类。然而,昨天我正在寻找逆转单链表操作的逻辑,我遇到的解决方案几乎有90%包括该函数,返回数据类型 Node * 的。因此,我感到困惑,因为无论你做了什么操作,你想要反转一个列表,是不是再次使用 linkedList 的类型?我这样做是错误的吗?
链接列表实现 I 一直在做;
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
class linkedList
{
public:
Node* firstPtr;
Node* lastPtr;
linkedList()
{
firstPtr=lastPtr=NULL;
}
void insert(int value)
{
Node* newNode=new Node;
newNode->data=value;
if(firstPtr==NULL)
firstPtr=lastPtr=newNode;
else {
newNode->next=firstPtr;
firstPtr=newNode;
}
}
void print()
{
Node *temp=firstPtr;
while(temp!=NULL)
{
cout<<temp->data<<" ";
temp=temp->next;
}
}
};
答案 0 :(得分:4)
你接近并没有错,但你可能会过分强调你的linkedList
课程。
该课程实际包含哪些内容?指向第一个节点的指针,以及指向最后一个节点的指针(这是冗余信息,因为您只需知道第一个节点即可找到最后一个节点)。所以基本上linkedList
只是一个辅助类,没有额外的信息。
来自linkedList
的成员函数可以轻松移到Node
内,或者制作以Node
为参数的免费函数。
答案 1 :(得分:2)
那么,什么是链表但是指向第一个节点的指针?只要您可以访问第一个节点,就可以完全访问列表,而您需要的只是指向第一个节点的指针。
除非您想存储有关列表的额外控制信息(例如其长度),否则列表本身不需要单独的数据类型。
现在,某些实现(例如你的实现)也可能存储指向列表中最后一个节点的指针以提高效率,允许您在O(1)而不是O(n)中追加项目。但这是列表的额外功能,而不是通常列表的要求。
答案 2 :(得分:0)
这些函数可能返回Node *类型,因为在反转链接列表后,它们将返回指向列表的第一个节点的指针。