Kolejka na liście, wielokrotne powielanie elementu na liście, FIFO

0

Witam!
Mam pewien problem, napisałem kolejkę zrobioną na liście i mam za zadanie sformatować ją tak aby jeżeli w kolejce mamy wartość = 5 to ma ona wystąpić pięć razy. W tym kodzie poniżej przedstawiam moje rozwiazanie aczkolwiek ono jest źle, a nie potrafię znaleźć błędu. Wyświetla ono ->5->5->5->5->5->NULL, a powinno ->5->5->5->5->5->6->6->6->6->6->6->NULL. Proszę o poradę i pomysł jak to naprawić.

#include <iostream>
using namespace std;
 
struct node
{
int val;
node * next;
};
 
node * head = NULL;
node * tail = NULL;
 
void addnode(int wartosc)
 
{
        node * pom;
        pom=new node;
        pom->val=wartosc;
 
        for (int i=pom->val; i>0 ; i--)
        {
        if ((head==NULL) && (tail==NULL))
        {
                head=pom;
                tail=pom;
        }
        else
        {
        tail->next=pom;
        tail=pom;
        tail->next=NULL;
        }
        }
}
 
void delnode()
{
        if(head!=NULL) {
                node * pom;
                pom = head;
                head=head->next; 
                delete pom;
        }
        else cout << "Stos jest pusty" << endl;
        }
 
 
void show()
{
        if (head != NULL && tail != NULL)
        {
                node * pom;
                pom = head;
 
                for (int i = pom->val ; i>0 ; i--)
                {
                        cout << "->" << pom -> val;
                        pom->next=pom;
                }
                cout << "->NULL"<<endl;
        }
        else cout << "Kolejka pelna"<<endl;
}
 
int main()
{
        addnode(5);
        addnode(6);
        show();
        system ("pause");
        return 0;
}
0

Skoro zwielokrotnienia dokonujesz już przy dodawaniu wpisów do listy to w funkcji show nie powinno być żadnego warunku sprawdzającego pom->val tylko iteracja po wszystkich wszystkich elementach listy

0

To próbuje napisać to:

 
 while(pom!=NULL)
{
                        cout << "->" << pom -> val;
                        pom=pom->next; 
} 

i pokazuje tylko po jednym elemencie a powinno całość listy chyba że coś poknociłem w 'addnode', po prostu nie wiem jak ruszyć dalej, już normalnie nawet sny mam o tym programiku ;p

0
#include <iostream>

using namespace std;

struct node{
	int val;
	node *next;
};

void showList(node *head){
	cout << "HEAD->";
	if(head != NULL){
		node *pom = head;

		while(pom !=NULL){
			cout << pom->val << "->";
			pom=pom->next;
		}
		cout<< "NULL" << endl;
	}
}

void addqueue(node *&head, node *&tail, int x){
	
	if(head == NULL)
	{
		head = new node;
		head->val = x;
		tail = head;
		head->next = NULL;
	}
	else
	{
		tail->next = new node;
		tail = tail->next;
		tail->val = x;
		tail->next = NULL;
	}
}

void copyElem(node *&head){
	if(head!=NULL){
		node *pom = head;
		node *pom2;
		while(pom!=NULL){
			pom2=new node;
			pom2->val = pom->val;
			pom2->next=pom->next;
			pom->next=pom2;
			pom=pom2->next;
		}
	}
}


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

int main(){	
	node *head2 = NULL;
	node *tail2 = NULL;

	cout << "Lista" << endl;
	addqueue(head2,tail2,1);
	addqueue(head2,tail2,2);
	addqueue(head2,tail2,5);
	
	cout << "Copy element X razy" << endl;
	copyElemX(head2);
	showList(head2);
	

	system("pause");
	return 0;
}

Kopiuje elementy z listy np:

Lista
1->2->5
Lista skopiowana
1->1->2->2->2->5->5->5->5->5->5->

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