单链接列表搜索

时间:2017-04-25 02:11:20

标签: c++ nodes singly-linked-list

我正在尝试创建一个搜索函数,通过我的节点查看具有相同参数的一个,但我似乎无法理解如何执行此操作。我的节点(Element)由指针next_,T color_和string name_组成。我需要返回一个与我找到的节点和前一个节点的对。如果未找到或之前没有,则为nullpointer。

template<typename T>
pair<Element<T>*, Element<T>*> PAL<T>::find(string name){
    pair<Element<T>*, Element<T>*> *result = nullptr;
    Element<T>* x = nullptr;
    Element<T>* y = nullptr;
    for (Element<T> *n = back_; n != nullptr; n = n -> next_){
        if (n -> name_ == name){
            Element<T>* x = Element<T>(n -> name_, n -> color_);
            result.first = x;
            result.second = y;
            break;
        }
        Element<T>* y = Element<T>(n -> name_, n -> color_);
    }
    return result;
}

这是我第一次做这些清单,所以我不知道自己在做什么。我感谢任何帮助,如果需要我可以提供更多信息! 谢谢!

1 个答案:

答案 0 :(得分:0)

您滥用from selenium.webdriver import PhantomJS driver = PhantomJS() script = """ var page = this; page.onResourceRequested = function (req) { console.log('requested: ' + JSON.stringify(req, undefined, 4)); }; page.onResourceReceived = function (res) { console.log('received: ' + JSON.stringify(res, undefined, 4)); }; """ driver.execute_phantomjs(script) driver.get("http://ariya.github.com/js/random/") driver.quit() 和一般指针。

此外,&#34; 如果找不到或之前没有,则返回null &#34;,第二个要求对于通用搜索功能!你真的想忽略列表中的第一个节点吗?

如果是这样,请尝试更像这样的事情:

std::pair

可替换地:

template <typename T>
struct Element
{
    Element* next_;
    T color_;
    std::string name_;
};

template <typename T>
class PAL
{
public:
    //...
    std::pair<Element<T>*, Element<T>*> find(std::string name);

private:
    Element<T> *head_; // pointer to FIRST element
};

template <typename T>
std::pair<Element<T>*, Element<T>*> PAL<T>::find(std::string name)
{
    Element<T> *previous = nullptr;

    for (Element<T> *node = head_; node != nullptr; node = node->next_)
    {
        if (node->name_ == name)
        {
            if (previous != nullptr)
                return std::make_pair(node, previous);

            break;
        }

        previous = node;
    }

    return std::make_pair<Element<T>*>(nullptr, nullptr);
}

但是,如果你真的不想忽略第一个节点,那么试试这个(并让调用者决定如果前一个节点为空则该怎么做):

template <typename T>
std::pair<Element<T>*, Element<T>*> PAL<T>::find(std::string name)
{
    if (head_ != nullptr)
    {
        Element<T> *previous = head_;

        for (Element<T> *node = head_->next; node != nullptr; node = node->next_)
        {
            if (node->name_ == name)
                return std::make_pair(node, previous);

            previous = node;
        }
    }

    return std::make_pair<Element<T>*>(nullptr, nullptr);
}