p_list.LST 883 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. Listing:
  2. 1 MODULE PList;
  3. 2 TYPE Node = RECORD val : INTEGER; next : POINTER TO Node END;
  4. 3 TYPE PNode = POINTER TO Node;
  5. 4 VAR head : PNode; ExitCode : INTEGER;
  6. 5 PROCEDURE Append(v : INTEGER);
  7. 6 VAR q, r : PNode;
  8. 7 BEGIN
  9. 8 NEW(q);
  10. 9 q^.val := v;
  11. 10 q^.next := NIL;
  12. 11 IF head = NIL THEN
  13. 12 head := q
  14. 13 ELSE
  15. 14 r := head;
  16. 15 WHILE r^.next # NIL DO
  17. 16 r := r^.next
  18. 17 END;
  19. 18 r^.next := q
  20. 19 END
  21. 20 END Append;
  22. 21 PROCEDURE Sum(p : PNode) : INTEGER;
  23. 22 BEGIN
  24. 23 IF p = NIL THEN
  25. 24 RETURN 0
  26. 25 ELSE
  27. 26 RETURN p^.val + Sum(p^.next)
  28. 27 END
  29. 28 END Sum;
  30. 29 BEGIN
  31. 30 head := NIL;
  32. 31 Append(5);
  33. 32 Append(7);
  34. 33 Append(9);
  35. 34 ExitCode := Sum(head)
  36. 35 END PList.
  37. 0 errors