// // This file contains the C# code from Program 4.21 of // "Data Structures and Algorithms // with Object-Oriented Design Patterns in C#" // by Bruno R. Preiss. // // Copyright (c) 2001--2002 by Bruno R. Preiss, P.Eng. All rights reserved. // // http://www.brpreiss.com/books/opus6/programs/pgm04_21.txt // public class LinkedList { protected Element head; protected Element tail; public sealed class Element { internal LinkedList list; internal object datum; internal Element next; public void InsertAfter(object item) { next = new Element(list, item, next); if (list.tail == this) list.tail = next; } public void InsertBefore(object item) { Element tmp = new Element(list, item, this); if (this == list.head) list.head = tmp; else { Element prevPtr = list.head; while (prevPtr != null && prevPtr.next != this) prevPtr = prevPtr.next; prevPtr.next = tmp; } } // ... } // ... }