1

私はこのコードを設計して、循環単方向リストでユーザーが望む任意の位置のポインターを取得できるようにしました。ポインターを返すために cout を使用しています。書き直す代わりに、他の関数で使用できるようなメカニズムが必要です。再びコード全体。そのために、現在 void である戻り値の型で何かをする必要があります

ここに関数があります..

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;行とsも実際に削除する必要があります。deleteポインターを再割り当てすることで、これらの新しいノードをすぐに破棄します。最後の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 に答える