C++:链表表示
C++: Linked List Representation
我知道如何表示链表的方法基本上是创建一个 Node 类(最好是结构体),并创建实际的 linkedList 类。但是,昨天我正在寻找反转单向链表操作的逻辑,我遇到的几乎 90% 的解决方案都包含返回数据类型 Node* 的函数。因此,我感到困惑,因为如果您无论执行什么操作都想反转列表,它不会再次出现在 linkedList 的类型中吗?我做错了吗?
我一直在做的链表实现;
#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;
}
}
};
你的方法没有错,但你可能过于强调你的linkedList
类。
该类实际上包含什么?指向第一个节点的指针和指向最后一个节点的指针(这是冗余信息,因为您只能通过知道第一个节点来找到最后一个节点)。所以基本上linkedList
只是一个没有额外信息的帮助类。
来自linkedList
的成员函数可以很容易地在Node
内部移动,或者成为以Node
作为参数的自由函数。
那么,什么是链表,而是指向第一个节点的指针?只要您可以访问第一个节点,列表是完全可访问的,您所需要的只是一个指向第一个节点的指针。
除非要存储有关列表的额外控件信息(例如其长度),否则不需要为列表本身使用单独的数据类型。
现在,为了提高效率,一些实现(例如您的实现)还可以存储指向列表中最后一个节点的指针,从而允许您在 O(1) 而不是 O(n) 中附加项目。但这是列表的额外功能,而不是一般列表的要求。
这些函数可能返回 Node* 类型,因为在反转链表后,它们将返回指向列表第一个节点的指针。
相关文章:
- 反向给定链表中的K节点
- 如果没有malloc,链表实现将失败
- 文本文件中的单词链表
- 努力将整数转换为链表。不知道我在这里做错了什么
- 链表,反向函数,数据结构
- 使用std::list创建循环链表
- 链表的泛型函数remove()与成员函数remove)
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 我们可以删除链表中静态内存中的节点吗
- C++,指针数组,指向双链表中的条目
- 链表中写入访问冲突的未知原因
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 打印所有链表的元素 (C++)
- 错误:需要类名(链表c++)
- 为什么C中的通用链表中存储的数据已损坏
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表c++插入,所有情况都已检查,但没有任何工作
- 奇数链表表示形式
- C++:链表表示
- C++使用 .或 -> 表示链表