#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.
связать что?
Надо ж просто новый элемент создать
как тут
и у него
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
пропущено
Работает, спасибо!