0

昇順で並べ替えられた整数のリンクされたリストに要素を挿入するこの関数を理解しようとしていますが、混乱しているコードの部分があります...

Node* insert (int x, Node *p) {

 if (p==nullptr)
   return cons(x,nullptr); //inserts the new node at front of list,before node with nullptr?
 if (x < = p-> val)
    return cons(x,p); //this also inserts node at front of the list?
 //now the rest of the function is where I get confused...
 Node *prev=p; //so this is not allocating new memory, so what exactly does it mean?
 Node * after=prev->next; 
 //prev->next is pointing at whatever after is pointing to but after has no address?

 while (after!=nullptr && x > after->val) { //whats going on here?
   prev=after;
   after=after-> next;
 }

 prev->next=cons(x,after);
 return p;
}
4

1 に答える 1

0
Node* insert (int x, Node *p) {

 if (p==nullptr)
 return cons(x,nullptr); 
//inserts the new node at front of list,before node with nullptr?
if (x < = p-> val)
return cons(x,p); //this also inserts node at front of the list?

上記のコードは、リンクされたリストの先頭に新しい要素を挿入します。これが発生する 2 つのインスタンスがあります。

  1. ヘッド (この場合は p) が NULL の場合。
  2. p が指している要素の値が、挿入される現在の要素よりも大きい場合。

これから先…

//now the rest of the function is where I get confused...
Node *prev=p; 
//so this is not allocating new memory, so what exactly does it mean?

これは、リンクされたリストをトラバースするために使用できる一時的なポインターのようなものです。したがって、先頭の 'p' を prev ポインターに格納します。

Node * after=prev->next; 
//prev->next is pointing at whatever 
//after is pointing to but after has no address?

これは、head の次の要素を格納するポインタです。

 while (after!=nullptr && x > after->val) { //whats going on here?
   prev=after;
   after=after-> next;
 }
 prev->next=cons(x,after);
 return p;
}

ここで、これは少しバグがあるように見えます。代わりに、次のようなことをしたいかもしれません:

While(prev->data >= inputdata && (after->data < inputdata || after == NULL)
{
  //insert your inputdata here because it is greater than the previous but less than after
 // or after is NULL.
}

これで混乱が解消されることを願っています。ご不明な点がございましたら、お知らせください。

于 2013-11-23T22:11:08.653 に答える