Stos (lista jednostronna) problem z funkcją, która wykonuje tyle kopii za elementem ile wynosi value

0

Witam!
Mam problem z napisaniem funkcji (jak w temacie), która kopiuje wartość-1 elementów za ten element. Dla przykładu jeśli mamy element o wartości 6 to wykona się 5 kopii i wyjściowa lista będzie Head->6->6->6->6->6->6->NULL.
Oto kod funkcji:

void CopyNumExist(node *&head)
{
	if(head!=NULL)
	{
		node *temp=head;
		while(temp!=NULL)
		{
			for(int i=0;i<temp->val-1;i++)
			{
				node *pom=new node;
				pom->val=temp->val;
				pom->next=temp->next;
				temp->next=pom;
			}
			temp=temp->next;
		}
	}
}
0

cos takiego:

void CopyNumExist(node*& head) // w zasadzie nigdy nie modyfikujesz wskaznika wiec ta referencja jest niepotrzebna
{
  if (head == NULL) { return; } // jesli C++11 to zalecam uzyc nullptr zamiast NULL. btw: lepiej rzucic wyjatek zamiast nie robic nic
  int copies = head->val - 1; // strzelam ze val jest intem, jesli nie to zmien odpowiednio
  for (int i = 0; i < copies; i++)
    {
      node* newNode = new node;
      newNode->val = head->val;
      newNode->next = head->next;
      head->next = newNode;
    }
}
0

Już kminie :)
Wielkie dzięki za pomoc!

0

A jak będzie wyglądać ta funkcja, żeby kopiowała wszystkie elementy listy, a nie tylko head?

0

Hej,
Napisałem tę funkcję. Działa i ostatecznie wygląda tak. Pzdr.

 
void CopyNumExist(node *&head)
{
	if(head!=NULL)
	{
		node *temp=head;
	        while(temp!=NULL)
		{
			int copies=temp->val-1;
			for(int i=0;i<copies;i++)
			{
				node *pom=new node;
				pom->val=temp->val;
				pom->next=temp->next;
				temp->next=pom;
				temp=temp->next;
			}
			temp=temp->next;
		}	
	}
}
1

Ta referencja jest niepotrzebna: CopyNumExist(node *&head), wystarczyłoby CopyNumExist(node *head).

0

Pierwszego If'a też można śmiało wywalić.

1

no można, ale jeśli head byłby NULL'em, a ktoś chciałby wywołać funkcje to lipa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1