Дописать в начало списка элементы, которые входят в 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.
Объяснение кода листинга программы
- Ввод данных о количестве элементов списков L1 и L2
- Ввод элементов списка L1
- Вывод списка L1
- Ввод элементов списка L2
- Вывод списка L2
- Начало процедуры Soed. На этом этапе список L инициализируется как пустой.
- Проверка каждого элемента списка L1. Если элемент присутствует в списке L2, он добавляется в список L.
- Цикл продолжается до тех пор, пока все элементы списка L1 не будут проверены.
- Вывод списка L.
- Удаление списка L1.
- Удаление списка L2.
- Удаление списка L.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д