【问题标题】:LinkedList creating nodesLinkedList 创建节点
【发布时间】:2016-03-12 22:51:31
【问题描述】:

我试图实现 C++ 单链接。我创建了一个方法,它创建一个节点并添加一个值并指向另一个节点,但我必须记住 index.html 。

  • 如何在不记住索引的情况下改进代码和创建节点? (我想保持顺序 = 第一个创建的节点指向另一个等)

类方法:

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;
}

【问题讨论】:

  • Node* head; 成员变量放入您的LinkkedList 类中。用nullptr 初始化head。检查headnullptr

标签: c++ linked-list


【解决方案1】:

我猜,你已经有两个成员变量: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;
    }
}

但是,如果您想在一次快速读取操作中找到列表大小而不遍历其所有节点,则索引变量会很有用。

【讨论】:

    【解决方案2】:

    您可以创建另一个名为 Tail 的指针来指向最后一个元素。这样您就可以在没有索引的情况下向列表添加值。 我把这个方法称为 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多