Witam,
mam zadanie o treści: napisz listę o polach wartość1, wartość2. Usuń element pierwszy. Jako ostatni dopisz element, który w polu wartość1 będzie miał największą wartość elementów z listy (chyba chodzi o pola wartość1), a w polu wartość2 wpisz wartość przekazaną jako argument formalny funkcji.
Napisałem poniższy program, w którym w polu wartość1 i wartość2 są odpowiednio liczby i ich kwadraty. Po utworzeniu listy mam wartości -6 i 36; ....; 9 i 81. Po wykonaniu funkcji m.in. dodającej element moim zdaniem powinien być taki: -6 i 36; ....; 9 i 81, 9 i 81 (dwukrotnie element z 9 i 81.) Nie wiem dlaczego ostatni element nie jest dodany do listy.
Byłbym wdzięczny za pomoc.
#include <iostream>
using namespace std;
struct aList{
int firstNumber;
int secondNumber;
aList *next;
};
aList *createList ( aList *& start ){
aList *present, *tail;
present = start;
for( int i = -6; i < 10; i++ ){
tail = present;
present = new aList;
present->firstNumber = i;
present->secondNumber = i*i;
present->next = NULL;
if( tail == NULL ){
start = present;
} else {
tail->next = present;
}
}
return start;
}
void printList( aList *start ){
aList *present;
present = start;
cout <<"\nDrukuje liste \n";
while ( present ){
cout << present->firstNumber <<" i " << present->secondNumber <<";";
present = present->next;
}
}
aList *deleteFirstAddGivenValue( aList *&start, int givenValue ){
aList *present;
present = start;
if ( start->next == NULL || start == NULL )
return false;
aList *addressOfNewFirstElement = start->next;
delete start;
start = addressOfNewFirstElement;
present = start;
int biggestFirstNumber = start->firstNumber;
while ( present ){
if ( biggestFirstNumber < present->firstNumber ){
biggestFirstNumber = present->firstNumber;
}
present = present->next;
}
present = start;
aList *newLastElement = NULL;
aList *currentLastElement = NULL;
while ( present->next != NULL ){
if ( present->firstNumber == biggestFirstNumber && present->secondNumber == givenValue ){
newLastElement = new aList;
newLastElement->firstNumber = biggestFirstNumber;
newLastElement->secondNumber = givenValue;
newLastElement->next = NULL;
}
present = present->next;
currentLastElement = present; // element, ktory w polu 'next' ma NULL, czyli ostatni element listy
}
// nadpisuje pole 'next' ostatniego elementu adresem nowego elementu, tj. 'newLastElement'
currentLastElement->next = newLastElement;
return start;
}
int main()
{
aList *start = NULL;
start = createList ( start );
printList (start );
int givenValue = 81;
start = deleteFirstAddGivenValue( start, givenValue );
printList (start );
return 0;
}