0

私の挿入メソッドでは、Pが最初の値(0)を取り、15がリンクリストの最後の値である必要があります。ただし、リストを印刷するときは、p-prevではなくp-> succを実行してアイテムを印刷する必要があり、15、14、13....;が印刷されます。これは正しいですか?または、関数の実装が間違っていますか?

 class Node{
      public:
           int value;       
           Node *succ;
           Node *prev;       
                  Node(int val, Node *s=NULL, Node *p=NULL)
                       :value(val),succ(s),prev(p){}

   Node *insert(Node *p,Node *n)
    {
        if(n==NULL)
           return p;
        if(p==NULL)
           return n;
        n->succ=p;
        if(p->prev)
           p->prev->succ=n;
        n->prev=p->prev;
        p->prev=n;           
           return n;
   }

   int main(int argc, char *argv[]) {
    Node *p= NULL;

    for(int i = 0; i<=15; i++){

    p = insert(p, new Node(i));
   }

while(p){
    cout<<p->value;
    head=p->succ;
}
4

1 に答える 1

1

最初にノードを追加しています。したがって、明らかに最後に追加されたものが最初になります。追加した順序でノードが必要な場合は、最後にノードを追加する必要があります。

Node *insert(Node *p,Node *n)
{
    Node * ptr;

    if(n==NULL)
       return p;

    if(p==NULL)
       return n;

    ptr = p;

    // Traverse to the end of the list
    while(ptr->succ)
    {
        ptr = ptr->succ;
    }

    ptr->succ = n;
    n->prev = ptr;

    return p;

}
于 2013-02-19T03:08:17.950 に答える