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 1. Introduction 2. Routing in a graph: correctness 2.1 Abstract link reversal 2.2 Vertex labels 2.3 Link labels 3. Routing in a graph: complexity 3.1 Work complexity 3.1.1 Vertex labeling 3.1.2 Link labeling 3.1.3 FR vs. PR with game theory 3.2 Time complexity 3.2.1 Full reversal 3.2.2 General LR and partial reversal 4. Routing and leader election in a distributed system 4.1 Distributed system model for applications 4.2 Routing in dynamic graphs 4.2.1 Overview of TORA 4.2.2 Route creation 4.2.3 Route maintenance 4.2.4 Erasing routes 4.2.5 Discussion 4.3 Leader election in dynamic graphs 5. Mutual exclusion in a distributed system 5.1 Mutual exclusion in fixed topologies 5.1.1 LRME algorithm 5.1.2 Correctness of LRME algorithm 5.2 Mutual exclusion for dynamic topologies 6. Distributed queueing 6.1 The arrow protocol 6.2 Correctness of arrow 6.3 Discussion 7. Scheduling in a graph 7.1 Preliminaries 7.2 Analysis for trees 7.3 Analysis for non-trees 7.4 Discussion 8. Resource allocation in a distributed system 8.1 Chandy and Misra's algorithm 8.2 Correctness of Chandy and Misra's algorithm 9. Conclusion Bibliography Authors' biographies. Acknowledgments......Page 11 Introduction......Page 13 Abstract Link Reversal......Page 17 Vertex Labels......Page 24 Link Labels......Page 27 Vertex Labeling......Page 31 Link Labeling......Page 32 FR vs. PR with Game Theory......Page 38 Full Reversal......Page 41 General LR and Partial Reversal......Page 46 Distributed System Model for Applications......Page 49 Overview of TORA......Page 50 Route Creation......Page 52 Route Maintenance......Page 53 Leader Election in Dynamic Graphs......Page 55 Mutual Exclusion in Fixed Topologies......Page 57 LRME Algorithm......Page 58 Correctness of LRME Algorithm......Page 60 Mutual Exclusion for Dynamic Topologies......Page 68 The Arrow Protocol......Page 71 Correctness of Arrow......Page 72 Discussion......Page 77 Preliminaries......Page 79 Analysis for Trees......Page 85 Analysis for Non-Trees......Page 86 Discussion......Page 91 Resource Allocation in a Distributed System......Page 93 Chandy and Misra's Algorithm......Page 94 Correctness of Chandy and Misra's Algorithm......Page 95 Conclusion......Page 99 Bibliography......Page 101 Authors' Biographies......Page 105