Мне нужно исключить к-ый узел. Что здесь не правильно?

Procedure DeleteNode(var h:Dlist; k:integer);
var q:dlist;
i:integer;
begin
i:=1;
writeln ('vvedite nomer k:');
readln (k);
if h=nil then writeln ('spisok pust')
else
begin
q:=h^.next;
while (q<>h) and (i<k) do
begin
q:=q^.next;
inc(i);
end;
if i<>k then
writeln ('nepravilniy nomer')
else
if q^.next=q then
begin
h:=nil;
dispose(q);
end
else
begin
if q=h then
p:=p^.next;
q^.prev^.next:=q^.next;
q^.next^.prev:=q^.prev;
dispose (q);
end;
end;
end;