Дописать в начало списка элементы, которые входят в L1, но не входят в L2 - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Дано задание: "Cформировать список L из элементов, которые входят одновременно в списки L1 и L2. Дописать в начало элементы, которые входят в L1, но не входят в L2, а в конец - элементы, которые входят в L2, но не входят в L1". Процедуру создания/заполнения списка и вывода написал, но не могу разобраться, как создать список L из элементов, которые входят одновременно в списки L1 и L2 и дальше( Помогите пожалуйста!

Решение задачи: «Дописать в начало списка элементы, которые входят в L1, но не входят в L2»

textual
Листинг программы
type
  PLink = ^TElement;
  TElement = Record
    data: integer;
    next: PLink;
  End;
 
procedure Input(var u: PLink);
var
  ElNew, ElPred: PLink;
  Value: integer;
  i, n: integer;
begin
  readln(n);
  u := nil;
  Writeln('Введите элементы списка: ');
  for i := 1 to n do
    begin
      Read(Value);
      New(ElNew);
      ElNew^.Data := Value;
      ElNew^.next := nil;
      if u = nil then
        u := ElNew
      Else
        ElPred^.next := ElNew;
      ElPred := ElNew;
    end;
end;
 
procedure Vivod(u: PLink; ch: string);
begin
  if u = nil then
    begin
      writeln('Список пуст!Для продолжения нажмите Enter');
      readln;
      Exit;
    end;
  writeln('Список ', ch);
  while u <> nil do
    begin
      write(u^.data, ' ');
      u := u^.next;
    end;
  writeln;
end;
 
procedure Delete(var u: PLink);
var
  x: PLink;
begin
  while u <> nil do
    begin
      x := u;
      u := u^.next;
      Dispose(x);
    end;
end;
 
/// Функция inList возвращает True если данный элемент входит в список
function inList(data : integer; L : PLink) : Boolean;
begin
  Result := True;
  while L <> nil do
    if L^.data = data then
      Exit
    else
      L := L^.next;
  Result := False;
end;
 
/// Процедура добавляет УНИКАЛЬНЫЙ элемент к списку
procedure Add(data : integer; var L : PLink);
begin
  if L = nil then
    begin
      New(L); L^.data := data; L^.next := nil;
    end
  else
    begin
      var Cur := L;
      var Last : PLink;
      repeat
        if Cur^.data = data then Exit;
        Last := Cur; Cur := Cur^.next;
      until Cur = nil;
      New(Last^.next); Last := Last^.next; Last^.data := data; Last^.next := nil;
    end;
end;
 
procedure Soed(L1: PLink; L2: PLink; var L: Plink);
begin
  L := nil;
  while L1 <> nil do
    begin
      if inList(L1^.data, L2) then
        Add(L1^.data, L);
      L1 := L1^.next;
    end;
end;
 
var
  L1, L2, L: PLink;
begin
  write('Введите кол-во элеметов списка "L1": '); Input(L1); Vivod(L1, 'L1');
  write('Введите кол-во элеметов списка "L2": '); Input(L2); Vivod(L2, 'L2');
  
  Soed(L1, L2, L); Vivod(L, 'L');
  
  Delete(L1);
  Delete(L2);
  Delete(L);
end.

Объяснение кода листинга программы

  1. Ввод данных о количестве элементов списков L1 и L2
  2. Ввод элементов списка L1
  3. Вывод списка L1
  4. Ввод элементов списка L2
  5. Вывод списка L2
  6. Начало процедуры Soed. На этом этапе список L инициализируется как пустой.
  7. Проверка каждого элемента списка L1. Если элемент присутствует в списке L2, он добавляется в список L.
  8. Цикл продолжается до тех пор, пока все элементы списка L1 не будут проверены.
  9. Вывод списка L.
  10. Удаление списка L1.
  11. Удаление списка L2.
  12. Удаление списка L.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы