C++ 了解链表中的cdr和car差异

C++ 了解链表中的cdr和car差异,c++,pointers,C++,Pointers,我想知道setcdr、setcar、cdr和car之间的区别。我知道car指的是节点的值,而cdr函数指的是节点中的下一个指针,但我不理解其中的区别 setcdr功能: void setcdr( Node* p, Node* q ) { assert (p != nullptr); p->next = q; } 如果无效,那么如何设置链接列表?它不应该返回一个节点 //returns the data field of the Node // if p is the

我想知道
setcdr
setcar
cdr
car
之间的区别。我知道
car
指的是节点的值,而
cdr
函数指的是节点中的下一个指针,但我不理解其中的区别

setcdr
功能:

void setcdr( Node* p, Node* q ) {

    assert (p != nullptr);
    p->next = q;
}
如果
无效
,那么如何设置链接列表?它不应该返回一个
节点

//returns the data field of the Node

// if p is the nullptr, we cannot get its data ...exit abruptly

int car( Node* p ) {

    assert (p != nullptr);
    return( p->value );
}

// returns the next field of the Node

// if p is the nullptr, we cannot get its next.... exit abruptly

Node* cdr( Node* p ) {

    assert (p != nullptr);
    return( p->next );
}

void setcar( Node* p, int x ) {

    assert (p != nullptr);
    p->value = x;
}

术语
car
cdr
来自LISP(请参阅)。在这种情况下,它们的使用可能是指构造链表的一种特殊方式:

  • 每个节点都有两个部分,
    car
    cdr
  • car
    片段指向节点的内容,
    cdr
    片段指向列表中的下一个节点
  • 列表中最后一个节点的
    cdr
    部分设置为
    NULL
    ,或其等效项
  • 使用这种方法,函数
    setcdr
    将修改现有节点的
    cdr
    部分(即,将节点指针设置为列表中的下一个节点),因此无需返回任何内容


    应该有一种方法可以创建一个新的
    节点
    ,但它不会使用您在文章中提到的任何函数。

    术语
    car
    cdr
    来自LISP(请参阅)。在这种情况下,它们的使用可能是指构造链表的一种特殊方式:

  • 每个节点都有两个部分,
    car
    cdr
  • car
    片段指向节点的内容,
    cdr
    片段指向列表中的下一个节点
  • 列表中最后一个节点的
    cdr
    部分设置为
    NULL
    ,或其等效项
  • 使用这种方法,函数
    setcdr
    将修改现有节点的
    cdr
    部分(即,将节点指针设置为列表中的下一个节点),因此无需返回任何内容


    应该有办法创建一个新的
    节点
    ,但它不会使用您在帖子中提到的任何函数。

    您能看看我编辑的问题吗,那么函数cdr在做什么?是看链表中的下一个节点吗?@user2963817正确。函数
    cdr
    返回传递给它的节点后面的节点。你能看看我编辑的问题吗,那么函数cdr在做什么?是看链表中的下一个节点吗?@user2963817正确。函数
    cdr
    返回传递给它的节点后面的节点。请参阅有关正确格式化代码块的信息。只有单行代码才需要反勾号。请参阅有关正确设置代码块格式的信息。只有单行代码才需要反勾号。