PerimeterEdge CreateDoubleLinkedListOfPerimeter() { var firstEdge = front.First().Edge; var edge = firstEdge; PerimeterEdge pe, prevPe = null, listStart = null; do { pe = CreatePerimeterElementFromEdge(edge); edge = FindNextEdgeOnPerimeter(edge); if (prevPe != null) { pe.Prev = prevPe; prevPe.Next = pe; } else { listStart = pe; } prevPe = pe; } while (edge != firstEdge); listStart.Prev = pe; pe.Next = listStart; return(listStart); }