链表C ++的语法

时间:2014-10-05 22:05:35

标签: c++ linked-list

我正在尝试为我的C ++类创建一个链表,我正在查看我教授的一些代码:

void List::add(char c)
{
    Node    *newNode(new Node(c));

    if (last == nullptr)
        first = last = newNode;
    else {
        last->next = newNode;
        last = newNode;
        }
}

int List::find(char c)
{
    Node    *node(first);
    int     i(0);

    while (node) {
        if (node->c == c)
            return i;
        node = node->next;
        i++;
        }
    return -1;

以下是头文件中的类声明:

class List
{
public:
    List(void);
    ~List(void);
    void add(char c);
    int find(char c);
    bool remove(int index);
    int length(void);

    friend std::ostream& operator<<(std::ostream& out, List& list);

private:
    class Node
    {
    public:
        Node(char c) : c(c), next(nullptr) { }
        char    c;
        Node    *next;
    };

    Node    *first;
    Node    *last;
};

第一个问题:括号是什么意思,使用它们的正确方法是什么?

Node    *newNode(new Node(c));
Node    *node(first);
int     i(0);

第二个问题:以下是什么意思?

Node(char c) : c(c), next(nullptr) { }

我过去使用struct定义了一个节点;语法是不同的,因为这是一个类?

1 个答案:

答案 0 :(得分:0)

此陈述

Node    *newNode(new Node(c));
Node    *node(first);
int     i(0);

相当于

Node    *newNode = new Node(c);
Node    *node = first;
int     i = 0;

Node类的构造函数

Node(char c) : c(c), next(nullptr) { }

使用mem-initializer list : c(c), next(nullptr)来初始化类的数据成员。 即数据成员c由构造函数参数c初始化,数据成员next由指针文字nullptr初始化