sum:=0; repeat p := L.first; while p <> nil do begin p1 := L1.first; while p1 <> nil do begin k := 0; pp := p; pp1 := p1; while (pp <> nil) and (pp1 <> nil) and (pp^.Data = pp1^.Data) do begin inc(k); pp := pp^.next; pp1 := pp1^.next; end; if k > kmax then begin kmax := k; p_del:=p; p1_del:=p1; end; p1 := p1^.next; end; p := p^.next; end; writeln(kmax); if kmax>10 then begin sum:=sum+1; p:=p_del; { Удаляем обычным способом kmax элементов, начиная с запомненного } for j :=1 to kmax do begin pp:=p_del; p_del:=p_del^.next; dispose(pp); end; if L.first = p then L.first := p_del else begin pp:=L.first; while pp^.next <> p do pp:=pp^.next; pp^.next:=p_del; end; p:=L.first; while p<> nil do begin writeln(p^.Data); p:=p^.next; end; // удаляем подстроку из второго списка p1:=p1_del; { Запоминаем, где начиналась последовательность. Оно чуть ниже пригодится } { Удаляем обычным способом kmax элементов, начиная с запомненного } for j :=1 to kmax do begin pp1:=p1_del; p1_del:=p1_del^.next; dispose(pp1); end; if L1.first = p1 then L1.first := p1_del else begin pp1:=L1.first; while pp1^.next <> p1 do pp1:=pp1^.next; pp1^.next:=p1_del; end; p1:=L1.first; while p1<> nil do begin writeln(p1^.Data); p1:=p1^.next; end; end; until kmax<=10; { пробовала написать еще or (p=nil) or (p1=nil); Тогда ошибки не выдает, но все равно только первую наибольшую подстроку ищет, а цикл не выполняет }