1

我设计了这段代码,以便我可以获得用户在循环单链表中想要的任何位置的指针,我正在使用 cout 返回指针,我想要这样一种机制,我可以将它与我的其他函数一起使用,而不是重新编写再次完整的代码,为此我需要对现在无效的返回类型做一些事情

这是功能..

void pointer_to_node(int index){
    Node*temptr;
    temptr = new Node;
    temptr = firstptr;

    Node*temptr2;
    temptr2 = new Node;
    temptr2 = NULL;
    int count = 1;

    while (temptr!=temptr2){
        if(count==index){
            cout << "Required Pointer is : ";
            cout<< temptr;}

        count++;
        temptr2=firstptr;
        temptr=temptr->nextptr;
    }

    if (index>size_of_list())
    {
        temptr=NULL;
        cout<< "Can't You think in bounds. Take your NULL Pointer ";
        cout << temptr;
        delete temptr;
        delete temptr2;
    }
}
4

1 回答 1

1

你只需要返回一个Node *.

然而,当你这样做的时候,你还真的需要去掉这些:temptr = new Node;行和deletes,因为你在那里泄漏了内存。您只需通过重新分配指针立即丢弃这些新节点。最后的deletes 将完全删除错误的节点,并且无论如何都不会在所有情况下调用。

如果你传递一个 0 的索引,你的循环可能确实需要很长时间。

我假设您有充分的理由想要在列表中循环时返回 NULL。

类似以下内容就足够了:

Node *pointer_to_node(int index)
{
    Node *temp = firstptr;
    while(index-- != 0) {
        temp = temp->nextPtr;
        if(temp == firstptr) return NULL;
    }
    return temp;
}
于 2012-12-14T16:38:39.900 回答