I'm learning linked lists in C++.

In an exercise I have to duplicate H time a give item.

So I thought in this method:

void duplicaNodo(int item, int &H, Pnodo &L){
    //duplica un nodo H volte, scorrendo tutta la lista
    Pnodo Temp, Temp2;
    if(L!=NULL){
        if(L->info==item){
            for(int i=0; i<H; i++){
                creaNodo(item, Temp);
                Temp->next=L->next;
                L->next=Temp;
            }
            Temp2=Temp->next;                    //Delete this
            duplicaNodo(item, H, Temp2->next);   //to stop at first occurrence
        } else {
            duplicaNodo(item, H, L->next);
        }
    }
}

Can you give some suggestions or I did it right?

Yes it does the job. Anyway why you would not use the recursion?

this will not do the job please try it :
recheck:
1-this will add only single item not H
2-and if 2 items are in row will doplicate the first only
3-and will crash if inal item is match

No, it will not crash.

Just tried it right now.

1. There is a for
2. That's why I added this:

Temp2=Temp->next;                    //Delete this
duplicaNodo(item, H, Temp2->next);   //to stop at first occurrence

3. Will not crash anyway.

For each issue rechecked
1-sorry you were right i thought it was nodo not Pnodo( Pnodo Temp)
2- try this

Pnodo pRoot;
		creaNodo(0,&pRoot);
		Pnodo pIntermediate;
		creaNodo(0,&pIntermediate);
		Pnodo pLast;
		creaNodo(1,&pLast);

		pRoot->next=pIntermediate;
		pIntermediate->next=pLast;
		cout<<"Print Pefore dup.\r\n";
		print(*pRoot);
		int count=1;
		duplicaNodo(0,count,pRoot);
		cout<<"Print After dup. 1\r\n";
		print(*pRoot);

you will got
0 0 1
then
0 0 0 1
not
0 0 0 0 1
3-try this

Pnodo pRoot;
		creaNodo(0,&pRoot);

		cout<<"Print Pefore dup.\r\n";
		print(*pRoot);
		int count=1;
		duplicaNodo(0,count,pRoot);
		cout<<"Print After dup. 1\r\n";
		print(*pRoot);

Edited 4 Years Ago by mazzica1: n/a

This article has been dead for over six months. Start a new discussion instead.