Добавить в список элемент со значением N…. после первого отрицательного элемента

#include <iostream>
using namespace std;
struct List {
	int data;
	List* Next;
};
List* Head;
List* k;

void  dobavit_element()
{
	while ((Head->Next != NULL) && (????)) {
?????????????????????????
}

void new_element(int a)
{
	k = new List;
	k->data = a;
	k->Next = Head;
	Head = k;


}
void print_list()
{
	k = Head;
	while (k != NULL) {
		cout << k->data << " ";
		k = k->Next;
	}
}
int main()
{
	int cnt, a;
	cout << "\nkol-vo elementov";
	cin >> cnt;
	List* Head = NULL;
	List* k;
	for (int i = 1; i <= cnt; i++) {
		cout << "\nVVedite element: ";
		cin >> a;
		new_element(a);

	}
	cout << "\nList: ";
	print_list();
	dobavit_element();
	cout << "\nList: ";
	print_list();


	return 0;
}

Надо в цикле проходить список пока не встретится отрицательное data, и потом если нашли такое, а не просто кончился список (или просто break в самом цикле вместо этой проверки), то создавать новый элемент с Next на Next текущего (отрицательного), и Next текущего поменять на новый.

Типа такого:

List* k = Head;
while (k != nullptr) {
    if (k->data < 0) {
        ... // добавить новый

        break;
    }

    k = k->Next;
}
void  dobavit_element()
{
	int n;
	List* k = Head;
	while (k != NULL) {
		if (k->data < 0) {
			cout << "Vvedite element";
			cin >> n;
			break;
		}
		k = k->Next;
	}
}

Ну я понял так но это не работает, замена не происходит. скорее потому что замены нет, но я не знаю как int связать с LIst.

связать что? :thinking:

Надо ж просто новый элемент создать
как тут

и у него

void  dobavit_element(int n)
{
	List* k = Head;
	while (k != NULL ) {
		if (k->data < 0) {
			q = new List;
				q->data = n;
				q = k->Next;
				k->Next = q->Next;
			break;
		}
		k = k->Next;
	}
}

как то так ?

Ну так если работает, значит так )

Тут просто q наверно.

замена всё равно не происходит

void  dobavit_element(int n)
{
	List* k = Head;
	while (k != NULL ) {
		if (k->data < 0) {
			q = new List;
				q->data = n;
				q = k->Next;
				k->Next = q;
			break;
		}
		k = k->Next;
	}

Замена чего? В задании вроде просто добавить просят.

А да, ну добавления тоже не происходит

А в списке есть отрицательные значения?)

да, есть.

#include <iostream>
using namespace std;
struct List {
	int data;
	List* Next;
};
List* Head;
List* k;
List* q;


void  dobavit_element(int n)
{
	List* k = Head;
	while (k != NULL ) {
		if (k->data < 0) {
			q = new List;
				q->data = n;
				q = k->Next;
				k->Next = q;
				
			break;
		}
		
		k = k->Next;
	}
}

void new_element(int a)
{
	k = new List;
	k->data = a;
	k->Next = Head;
	Head = k;


}
void print_list()
{
	k = Head;
	while (k != NULL) {
		cout << k->data << " ";
		k = k->Next;
	}
}
int main()
{
	int cnt, a, n;
	cout << "\nkol-vo elementov: ";
	cin >> cnt;
	List* Head = NULL;
	List* k;
	for (int i = 1; i <= cnt; i++) {
		cout << "\nVVedite element: ";
		cin >> a;
		new_element(a);
		

	}

	cout << "\nList: ";
	print_list();
	cout << "\nVvedite element: ";
	cin >> n;
	dobavit_element(n);
	cout << "\nList: ";
	print_list();


	return 0;
}

Тут ->Next пропущено

1 лайк

Работает, спасибо!