我正在尝试学习如何用C ++编写链表。我的书中有这样写的find方法......
〜在标题〜
中ListNode* _find(size_t position);
〜在.cpp~
中ListNode* LList::_find(size_t position)
{
ListNode *node = head_;
size_t i;
for (i=0; i<position; i++){
node = node->link_;
}
return node;
}
一切正常,但我不明白为什么函数有指针?在中,我不明白为什么在ListNode之后有*。如果有人能解释我会很感激!
答案 0 :(得分:1)
方法签名中的ListNode *是方法的返回类型。您的方法返回一个指向ListNode的指针,*字符用于指示该变量是指针。返回指针的原因是,根据定义,LinkedList是一个带有指向列表中下一个节点的指针的结构。
将LinkedList与简单数组进行对比,其中元素不是指针。
答案 1 :(得分:0)
首先,该功能无效。
ListNode* LList::_find(size_t position)
{
ListNode *node = head_;
size_t i;
for (i=0; i<position; i++){
node = node->link_;
}
return node;
}
例如,head_可以等于NULL,或者参数position的值可以大于列表中的实际节点数。
因此,有效代码可以采用以下方式
ListNode* LList::_find(size_t position)
{
ListNode *node = head_;
for ( size_t i = 0; node && i < position; i++ ){
node = node->link_;
}
return node;
}
至于你的问题,那么列表的构建方式使得每个节点都包含指向下一个节点的指针。而head_的第一个bnode也是一个指针。因此从函数返回指针更简单。如果要返回对象本身,那么万一没有目标对象,除了抛出异常外,还不清楚该做什么。