这个链接列表如何流动?

时间:2015-03-12 04:05:00

标签: c++ pointers linked-list nodes

节点的结构如下:

struct Node {
    int value;
    Node *next;
};

// construct a new node 
    Node * cons( int x, Node* p) {
    return new Node{x, p};
}

现在,如果我输入我的主体:

   Node *p;
   p = cons(3,nullptr);
   p = cons(2,p);
   p = cons(1,p);
   p = cons(4,p);

开始使用我的第一个节点而不是nullptr是否有更好的价值?根据我的理解,这是4个节点的顺序。那是对的吗?节点值3是列表中的第一个。所以这个函数会按顺序搜索我的链表,就像查看节点值3,2,1,4,然后是空节点一样。

//search linklist in order for value x
bool searchInOrder(int x, Node *p){
   while(p->next != nullptr){
   if(x == p->value)
      return true;
      p = p->next;
   }
   return false;
}

1 个答案:

答案 0 :(得分:4)

问题:

  

开始使用我的第一个节点而不是nullptr是否有更好的价值?

答案:

  

这是创建链表的第一个节点的最佳方法。

问题:

  

据我所知,这是4个节点。那是对的吗?节点值3是列表中的第一个。所以这个函数会按顺序搜索我的链表,就像查看节点值3,2,1,4,然后是空节点一样。

答案:

  

是的,有4个节点。但是,值为3的节点不是列表中的第一个节点。

之后

p = cons(3,nullptr);

列表是:

+---+        +-----+
+ p +  --->  |  3  |  ---> NULL
+---+        +-----+

之后

p = cons(2,p);

列表是:

+---+        +-----+        +-----+
| p |  --->  |  2  |  --->  |  3  | ---> NULL
+---+        +-----+        +-----+

p = cons(4,p);

列表是:

+---+        +-----+        +-----+      +-----+        +-----+
| p |  --->  |  4  |  --->  |  1  |--->  |  2  |  --->  |  3  | ---> NULL
+---+        +-----+        +-----+      +-----+        +-----+