Дописать в начало списка элементы, которые входят в L1, но не входят в L2 - PascalABC.NET
Формулировка задачи:
Дано задание:
"Cформировать список L из элементов, которые входят одновременно в списки L1 и L2. Дописать в начало элементы, которые входят в L1, но не входят в L2, а в конец - элементы, которые входят в L2, но не входят в L1".
Процедуру создания/заполнения списка и вывода написал, но не могу разобраться, как создать список L из элементов, которые входят одновременно в списки L1 и L2 и дальше(
Помогите пожалуйста!
Листинг программы
- Program Lists;
- Type PLink=^TElement;
- TElement=Record
- data:integer;
- next:PLink;
- End;
- Var L1,L2, L:PLink;
- t, temp:integer;
- 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;
- Procedure Soed(Var L1:PLink; Var L2:PLink; Var L:Plink);
- Var a, b, c:integer;
- Begin
- a := 0;
- b := 0;
- c := 0;
- While L1<>nil do
- Begin
- a:=L1^.data;
- writeln('_-_-_-_-_ ',a);
- L1:=L1^.next;
- While L2<>nil do
- Begin
- b:=L2^.data;;
- L2:=L2^.next;
- if (a=b) then Begin
- L:=a;
- L^.next:=Nil;
- End;
- End;
- End;
- End;
- 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»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д