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
返回传递给它的节点后面的节点。请参阅有关正确格式化代码块的信息。只有单行代码才需要反勾号。请参阅有关正确设置代码块格式的信息。只有单行代码才需要反勾号。