Link reversal is a versatile algorithm design technique that has been used in numerous
distributed algorithms for a variety of problems. The common thread in these algorithms is that
the distributed system is viewed as a graph with vertices representing the computing nodes and
edges representing some other feature of the system (for instance point-to-point communication
channels or a conflict relationship). Each algorithm assigns a virtual direction to the edges
of the graph producing a directed version of the original graph. As the algorithm proceeds
the virtual directions of some of the links in the graph change in order to accomplish some
algorithm-specific goal. The criterion for changing link directions is based on information
that is local to a node (such as the node having no outgoing links) and thus this approach
scales well a feature that is desirable for distributed algorithms. This monograph presents
in a tutorial way a representative sampling of the work on link-reversal-based distributed
algorithms. The algorithms considered solve routing leader election mutual exclusion
distributed queueing scheduling and resource allocation. The algorithms can be roughly
divided into two types those that assume a more abstract graph model of the networks and
those that take into account more realistic details of the system. In particular these more
realistic details include the communication between nodes which may be through asynchronous
message passing and possible changes in the graph for instance due to movement of the nodes.
We have not attempted to provide a comprehensive survey of all the literature on these topics.
Instead we have focused in depth on a smaller number of fundamental papers whose common
thread is that link reversal provides a way for nodes in the system to observe their local
neighborhoods take only local actions and yet cause global problems to be solved. We
conjecture that future interesting uses of link reversal are yet to be discovered. Table of
Contents: Introduction Routing in a Graph: Correctness Routing in a Graph: Complexity
Routing and Leader Election in a Distributed System Mutual Exclusion in a Distributed System
Distributed Queueing Scheduling in a Graph Resource Allocation in a Distributed System
Conclusion