In some applications, particular information needs to be retrieved from a list with a much higher frequency than other information. Under these conditions the best way to arrange the list is to put the most frequently retrieved item at the head of the list, the second most frequently retrieved item in the second position and so on. The appropriate order is often not known in advance. To make a list progress towards the appropriate order whenever an item is retrieved it can be exchanged with its predecessor. Under this scheme the most frequently retrieved items eventually migrate to the front of the list. Design algorithms that search and maintain such a linked list.