![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
доброго времени суток. подскажите, как можно удалить все однозначные числа из односвязного списка.
|
|
#2
|
||||
|
||||
|
Проходишь по всему списку, каждый элемент списка сравниваешь с 10. Если меньше 10 - удаляешь. Если нужны алгоритмы обхода списка и удаления из него - в гугл.
|
|
#3
|
|||
|
|||
|
Bargest спасибо.
помогите найти ошибку в функции. после её выполнения список не выводится. Код:
Procedure Double_pol(top:p_list); // дублирует пониндромы
Function pal(x:integer):boolean;
var l,d,i:integer;
s:string;
begin
pal:=true;
str(x,s);
d := length(s);
If d=1 then begin result:=false; exit end;
l := d div 2;
for i := 1 to l do
if s[i] <> s[d+1-i] then pal := false;
end;
var p1,q:p_list;
begin
p1:=top;
while p1^.next<>top do begin
if pal(p1^.num) then begin
new(q);
q^.num:=p1^.num;
q^.next:=p1^.next;
p1^.next:=q;
p1:=p1^.next;
end;
p1:=p1^.next;
end;
end; |
|
#4
|
|||
|
|||
|
Есть подозрение, что она либо падает, либо уходит в бесконечный цикл (если список не циклический):
Вот это: Код:
while p1^.next<>top do begin должно быть: Код:
while p1^.next<>nil do begin |
|
#5
|
|||
|
|||
|
Imikle спасибо! функция теперь работает.
помогите, не могу разобраться теперь с этой процедурой. проблема аналогична - после её выполнения список не выводится. Код:
Procedure del_one_dig_num(top:p_list); //удаляет однозначные числа из последовательности
Procedure del(adr:p_list);
var z:p_list;
begin
if adr<>top then begin
z:=top;
while z^.next<>adr do z:=z^.next;
end;
if adr=top then top:=top^.next
else z^.next:=adr^.next;
dispose(adr);
end;
var p:p_list;
begin
p:=top^.next;
del(p);
while p^.next<>nil do begin
if (p^.num < 10) and (p^.num > -10) then del(p);
p:=p^.next;
end;
end; |
|
#6
|
|||
|
|||
|
посмотрите, что не так, я целыйый день не могу найти.
|