sclass LineComp_LinkedList { sclass Node { int value; A prev, next; } Node head; new MapSetMap indexByElement; void replacePair(int pa, int pb, int replaceWith, LineComp_PairCounts pairCounts) { Set setA = indexByElement.get(pa); if (setA != null) for (Node node : cloneList(setA)) if (node.next != null && node.next.value == pb) { if (node.prev != null) pairCounts.remove(node.prev.value, pa); pairCounts.remove(pa, pb); if (node.next != null) pairCounts.remove(pb, node.next.value); indexByElement.remove(pa, node); node.value = replaceWith; indexByElement.add(pa, replaceWith); indexByElement.remove(pb, node.next); node = node.next.next; if (node.prev != null) pairCounts.add(node.prev.value, replaceWith); if (node.next != null) pairCounts.add(replaceWith, node.next.value); } } }