C ++:链接列表表示

时间:2012-04-23 08:46:40

标签: c++ algorithm data-structures linked-list

知道如何表示链接列表的方式基本上是创建一个 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;
        }
    }
};

3 个答案:

答案 0 :(得分:4)

你接近并没有错,但你可能会过分强调你的linkedList课程。

该课程实际包含哪些内容?指向第一个节点的指针,以及指向最后一个节点的指针(这是冗余信息,因为您只需知道第一个节点即可找到最后一个节点)。所以基本上linkedList只是一个辅助类,没有额外的信息。

来自linkedList的成员函数可以轻松移到Node内,或者制作以Node为参数的免费函数。

答案 1 :(得分:2)

那么,什么是链表但是指向第一个节点的指针?只要您可以访问第一个节点,就可以完全访问列表,而您需要的只是指向第一个节点的指针。

除非您想存储有关列表的额外控制信息(例如其长度),否则列表本身不需要单独的数据类型。

现在,某些实现(例如你的实现)也可能存储指向列表中最后一个节点的指针以提高效率,允许您在O(1)而不是O(n)中追加项目。但这是列表的额外功能,而不是通常列表的要求

答案 2 :(得分:0)

这些函数可能返回Node *类型,因为在反转链接列表后,它们将返回指向列表的第一个节点的指针。