Используя линейный односвязный список найти введённое с клавиатуры число, удалит

Используя линейный односвязный список найти введённое с клавиатуры число, удалить число стоящий перед найденным за 1 позицию и вставить число, введённый с клавиатуры, перед найденным .Pascal. через указатели {New(x); {выделение места в памяти для переменной типа Spisok} x^.Data :=3; { заполним поле Data первого элемента} x^.Next :=Nil; {заполним поле Next первого элемента: указатель в Nil } Head :=x; {установим указатель головы списка на первый элемент}}-Пример
Гость
Ответ(ы) на вопрос:
Гость
// Использование указателей для создания односвязного списка // Сделано на базе демонстрационного примера PascalABC.Net // // PascalABC.NET 3.2, сборка 1325 от 19.10.2016 type   PNode=^TNode;   TNode=record     data:integer;     next:PNode;   end; function NewNode(d:integer;n:PNode):PNode; begin   New(Result);   Result^.data:=d;   Result^.next:=n; end; procedure WriteNode(a:PNode); // Вывод односвязного списка begin   Writeln('Содержимое односвязного списка: ');   var p:=a;   while p<>nil do begin     Write(p^.data,' ');     p:=p^.next;     end;   Writeln end; function SeekNode(k:integer;a:PNode):PNode; // Поиск элемента со значением k в списке begin   var p:=a;   Result:=Nil;   while p<>nil do begin     if p^.data=k then begin Result:=p; break end;     p:=p^.next     end end; function PredNode(a,f:PNode):PNode; // Поиск предшественника f среди a begin   var p:=a;   while p^.next<>f do p:=p^.next;   Result:=p end; procedure Clear(a:pNode); // Разрушение односвязного списка begin   var p:=a;   while p<>nil do begin     var p1:=p;     p:=p^.next;     Dispose(p1); // Память обязательно возвращать     end end; var   first,found,father,grandfather,greatgrandfather:PNode;   begin   Randomize;   first:=nil;   for var i:=1 to 10 do     first:=NewNode(Random(100),first);   WriteNode(first); // первоначальное состояние списка   var k:=ReadInteger('Введите число для поиска в списке');   found:=SeekNode(k,first);   if found<>nil then begin     father:=PredNode(first,found); // отец     grandfather:=PredNode(first,father); // дед     greatgrandfather:=PredNode(first,grandfather); // прадед     greatgrandfather^.next:=father;     Writeln('Элемент ',grandfather^.data, ' удален');     Dispose(grandfather);     WriteNode(first);     k:=ReadInteger('Введите число для вставки');     father^.next:=NewNode(k,found);     WriteNode(first);     end   else Writeln('Такого числа в списке нет');   Clear(first) end.   Пример Содержимое односвязного списка: 11 75 44 86 88 83 92 18 4 23 Введите число для поиска в списке 88 Элемент 44 удален Содержимое односвязного списка: 11 75 86 88 83 92 18 4 23 Введите число для вставки 40 Содержимое односвязного списка: 11 75 86 40 88 83 92 18 4 23
Не нашли ответ?
Ответить на вопрос
Похожие вопросы