Usuwanie elementu listy jednokierunkowejprzez funkcję.

0

Moje pytanie odnosi się do języka delphi, jednak myślę, że odpowiedź odnosi się do ogółu programowania i rozwiązanie jest raczej proste, dlatego umieszczam je w dziale Newbie.
Przechodząc do pytania. Posiadam taką funkcję:

function Usunpierw(var first:wskaznik):wskaznik;stdcall;
  var t:wskaznik;
begin
  try
    t:=first;
    first:=first^.next;
    dispose(t);
    result:=first;
  except
    showmessage('Wystąpił błąd podczas usuwania elementu z listy.')
  end;
end;

Której zadaniem jest usunięcie pierwszego elementu listy jednokierunkowej i zwrócenie adresu nowego,pierwszego elementu.
I tu pojawia się moje pytanie, mianowicie:
Czy wywołanie wsk:=Usunpierw spowoduje zamierzony efekt, czyli usunięcie elementu pierwszego z listy i przyjęcie przez zmienną wsk (oczywiście typu wskaznik) wartości wskazującej na nowy element pierwszy?
Z góry dziękuję za odpowiedzi! :)

3

1.W jakim celu zwracasz cokolwiek z tej funkcji? Przecież argument i tak masz przekazywany przez referencję.
2.Usuń ten blok try.
3.Dlaczego nie uruchomisz i nie przekonasz się?

3

Jedno z dwóch:
1.

procedure Usunpierw(var first:wskaznik);stdcall; // wywołanie Usunpierw(head);
var t:wskaznik;
begin
  try
    t:=first;
    first:=first^.next;
    dispose(t);
  except
    showmessage('Wystąpił błąd podczas usuwania elementu z listy.')
  end;
end;
function Usunpierw(first:wskaznik):wskaznik;stdcall; // wywołanie head:=Usunpierw(head);
var t:wskaznik;
begin
  try
    t:=first;
    first:=first^.next;
    dispose(t);
    result:=first;
  except
    showmessage('Wystąpił błąd podczas usuwania elementu z listy.')
  end;
end;

Ale wg mnie nie powinieneś łapać wyjątku, który może być tylko Access Violation który i tak nie złapiesz, Więc:

function Usunpierw(var first:wskaznik):Boolean;stdcall; // wywołanie if not Usunpierw(head) then showmessage('Lista jest pusta, nie da sie usunac elementu.')
var t:wskaznik;
begin
  Result:=(first<>nil);
  if Result then 
  begin
    t:=first;
    first:=first^.next;
    dispose(t);
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1