{ > Now, I gotta work on sortin' em. I believe I can 'swap' the > positions of the Pointers eh? > > I can't figure out how to swap the Pointers. Could you please > gimme a wee bit more help? I've just started doing sorts, and > have only used the Bubble sort at the moment in a few Programs, > so I'm still a little shakey on sorts. I understand the Bubble Here's an *example* on how to sort a linked list. There are more efficient ways to sort a list, but this gives you all the essential elements in doing a sort. (note that ListPtr is a doubly linked list) } Procedure SortList(Var FCL:ListPtr); Var TempAnchor, TemPtr1, TemPtr2 :ListPtr; Procedure MoveLink(Var Anchor, Ptr1, Ptr2 :ListPtr); Var TemPtr3, TemPtr4 :ListPtr; begin TemPtr3 := Ptr1^.Next; { temporary Pointer preserves old Pointer value } TemPtr4 := Ptr2^.Last; { ditto } Ptr2^.Last := Ptr1; { do the Pointer swap } Ptr1^.Next := Ptr2; Ptr1^.Last^.Next := TemPtr3; { fixup secondary Pointers } TemPtr3^.Last := Ptr1^.Last; Ptr1^.Last := TemPtr4; if TemPtr4 <> NIL then { if temporary Pointer is not NIL, then it has to point to swapped Pointer } TemPtr4^.Next := Ptr1; if Ptr1^.Last = NIL then { if swapped Pointer points to preceding NIL Pointer, this Pointer is the new root. } Anchor := Ptr1; end; begin TempAnchor := FCL; { holds root of list during sort } TemPtr2 := TempAnchor; { TemPtr2 points to current data being Compared } Repeat TemPtr1 := TemPtr2; { TemPtr1 points to the next ordered data } FCL := TemPtr2; { start FCL at root of UNSorTED list - sorted data precede this Pointer } Repeat FCL := FCL^.Next; if FCL^.data < TemPtr1^.data then { Compare data values } TemPtr1 := FCL; { if necessary, reset TemPtr1 to point to the new ordered value } Until FCL^.Next = NIL; { keep going Until you reach the end of the list. After Exit, the next value in order will be pointed to by TemPtr1 } if TemPtr1<>TemPtr2 then { if TemPtr1 changed, a value was found out of order } MoveLink(TempAnchor,TemPtr1,TemPtr2) { then swap Pointers } else TemPtr2 := TemPtr2^.Next; { else advance to the next Pointer in list } Until TemPtr2^.Next = NIL; { Until we are finished sorting the list } FCL := TempAnchor; { changes root Pointer to new root value } end;