LinkedList创建节点

时间:2016-03-12 10:37:34

标签: c++ linked-list

我尝试实现单独链接的C ++。我创建了一个方法,它创建一个节点并添加一个值并指向另一个节点,但我必须记住索引。

  • 如何在不记住索引的情况下改进代码并创建节点? (我想维护order =首先创建节点指向另一个等等。)

班级方法:

void LinkedList::addValue ( int val )
{
    if ( ! index ) 
    {
      n = new Node();
      head = n;
      n->value = val;
      n->next = NULL;
    }
    else
    {
      n->next = new Node( );
      n = n->next;
      n->value = val;
    }

  ++index;
}

2 个答案:

答案 0 :(得分:2)

我想,你已经有两个成员变量: head 这是根节点, n 是最后一个节点。您应该在构造函数中使用NULL(对于c ++ 11为nullptr)初始化它们。然后,您可以在向列表中添加新值时检查 n == NULL

LinkedList::LinkedList():head(NULL),n(NULL)
{}

void LinkedList::addValue ( int val )
{
    if (n==NULL) 
    {
      n = new Node();
      head = n;
      n->value = val;
      n->next = NULL;
    }
    else
    {
      n->next = new Node( );
      n = n->next;
      n->value = val;
    }
}

但是,如果要在一次快速读取操作中查找列表大小而不迭代其所有节点,则索引变量非常有用。

答案 1 :(得分:1)

您可以创建另一个名为 Tail 的指针,指向最后一个元素。这样,您可以在没有索引的情况下为列表添加值。 我将此方法称为追加 void append(int val){

 void append(int val) {
        Node* tmp = new Node(); // creating a temporary pointer to a new node
        tmp -> value = val
        last -> next = tmp; // connect the new node to the linked list
        last = tmp;  // set the last to the newly created node
        listSize++; // increase the size of the list
    }

您还可以通过为节点创建构造函数来改进代码:

Class Node{
public:
    int value;
    Node * next;
    Node(Node * nextEle = NULL) {
        next = nextEle;
    }
    Node(int val,Node * nextEle = NULL) {
        value = val;
        next = nextEle;
    }
}