Operacja na liście (wstawianie elementu przed dany element)

0
void addprzed(int x, int y)
{
    node *pom = head;
    while (pom -> next != NULL)
    {
        if (pom -> next -> val == y)
        {
            node *pom2 = new node;
            pom2 -> val = x;

            pom -> next = pom2;   
            pom -> next -> next -> val = y;  
            pom -> next -> val = x;
        }
        pom = pom -> next;
    }
}

Nie wiem czemu, ale przy kompilowaniu wyskakuje błąd.

Usunięcie prefiksu z tytułu wątku, poprawienie tagów i zmniejszenie wcięć w kodzie - fp

0

Mnostwo informacji diagnostycznych zamiesciles.

Na przedostatnim elemencie sie wycrashuje, ze wzgledu na podwojne odwolanie do next.
W sumie to przy pierwszym odwolaniu do pom->next->next, bo nie inicjalizujesz tego next w zaden sposob.

0

Nie wiem czemu, ale przy kompilowaniu wyskakuje błąd.

Ja wiem: bo masz błąd w kodzie.
A jak dodatkowo powiesz jaki błąd, to może nawet pomożemy Ci go rozwiązać.

0

Może będzie lepiej jak wrzucę cały kod.

#include<iostream>
#include <cstdlib>

using namespace std;

struct node
{
	int val;
	node *next;
};
node *head = NULL;

void addhead(int x)
{
	node *pom = new node;
	pom -> val = x;
	pom -> next = head;
	head = pom;
	pom = NULL;
}

void addkoniec(int x)
{
	if (head == NULL)
	{
		addhead(x);
	}
	else
	{
		node *pom = head;
		while (pom -> next != NULL)
		{
			pom = pom -> next;
		}
		pom -> next = new node;
		pom -> next -> val = x;
		pom -> next -> next = NULL;
	}
}

void addprzed(int x, int y)
{	
	node *pom = head;
	while (pom -> next != NULL)
	{
		if (pom -> next -> val == y)
		{
			node *pom2 = new node;
			pom2 -> val = x;
		
			pom -> next = pom2;
			pom -> next -> next -> val = y;
			pom -> next -> val = x;
		}	
		pom = pom -> next;
	}
}


void show(node *head)
{
	node *pom = head;
	while (pom!=NULL)
	{
		cout << pom -> val << "->";
		pom = pom -> next;
	}
}

void deletehead()
{
	if (head!=NULL)
	{
		node *pom;
		pom = head->next;
		delete(head);
		head=pom;
	}
}

int main(int argc, char *argv[])
{
	addhead(5);
	addhead(45);
	addhead(3);
	addhead(9);
	addhead(35);
	addhead(18);
	addhead(13);
	addhead(7);
	show(head);

	cout << endl << "usuniecie glowy" << endl;
	deletehead();
	show(head);

	cout << endl << "dodanie na koniec" << endl;
	addkoniec(98);
	show(head);

	cout << endl << "dodanie przed element" << endl;
	addprzed(3, 9);
	show(head);

	system("pause");
}
 
0

Heh, błąd jest gdzieś tutaj:

pom -> next = pom2;   
pom -> next -> next -> val = y;  
pom -> next -> val = x;

tyle, że na logikę wydaję mi się, że powinno hulać. Dlatego piszę w dziale Newbie...

0

Juz Ci napisalem dlaczego tam jest blad i co powinienes zrobic.

Reszty nie sprawdzam ze wzgledu na Twoja postawe, ktora mozna krotko strescic:
"Panie doktorze, Panie doktorze mam problem! Wysylam moje zdjecie..."

0

No bo krótki kod, więc o czym się rozpisywać. Nie wiem o co chodzi z tą inicjacją, ale w każdym razie dziękuję za chęci do pomocy.

0

Udało mi się zrobić wstawianie za element, ale żeby wstawiał przed nie wiem co poradzić.

void addza(int x, int y)
{	
	node *pom = head;
	while (pom -> next != NULL)
	{
		if (pom -> val == y)
		{
			node *pom2 = new node;
			pom2 -> val = x;

			pom2 -> next = pom -> next;
			pom -> next = pom2;

		}	
		pom = pom -> next;
	}
}
 
0

Dodaj return; na końcu zakresu ifa.

0

Po dłuższej przerwie jakoś mi się udało dokończyć ten programik. Może komuś się kiedyś przyda.

void addprzed(int x, int y)
{	
	node *pom = head;
	while (pom -> next != NULL)
	{
		if ((pom -> next) -> val == y)
		{
			node *pom2 = new node;
			pom2 -> val = x;
			pom2 -> next = pom -> next;
			pom -> next = pom2;
			return;
		}	
		pom = pom -> next;
	}
} 

I dziękuję wszystkim udzielającym się za pomoc :)

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