如何为链接列表编写_find方法?

时间:2013-12-19 22:25:46

标签: c++ linked-list

我正在尝试学习如何用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之后有*。如果有人能解释我会很感激!

2 个答案:

答案 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也是一个指针。因此从函数返回指针更简单。如果要返回对象本身,那么万一没有目标对象,除了抛出异常外,还不清楚该做什么。