public static void main(String[] args) { DoublyLinkedList<Integer, String> list = new DoublyLinkedList<Integer, String>(); list.add(5, "James"); System.out.println(list.size()); System.out.println(list.get(5)); list.add(5, "Thomas"); System.out.println(list.size()); System.out.println(list.get(5)); }
public void testBasicBuildAndGet() { for (int size = 0; size < 15; ++size) { final DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>(); DoublyLinkedList.LinkNode<Integer> prevLinkNode = null; for (int i = 0; i < size; ++i) { final DoublyLinkedList.LinkNode<Integer> linkNode = list.add(i); assertEquals(i, linkNode.getIndex()); assertEquals("i=" + i, (Integer) i, linkNode.getElt()); assertEquals(prevLinkNode, linkNode.getPrev()); assertNull(linkNode.getNext()); assertEquals(i + 1, list.size()); prevLinkNode = linkNode; } assertEquals("size=" + size, size, list.size()); for (int i = 0; i < size; ++i) { assertEquals("i=" + i, (Integer) i, list.get(i)); } } }
public static void main(String[] args) throws Exception { // Set up output PrintWriter pen = new PrintWriter(System.out, true); // Create some lists DoublyLinkedList<String> strings = new DoublyLinkedList<String>(); DoublyLinkedList<Integer> numbers = new DoublyLinkedList<Integer>(); // Prepend a few elements numbers.prepend(42); numbers.prepend(77); numbers.prepend(11); printList(pen, numbers); // Append a few elements numbers.append(1); numbers.append(2); numbers.append(3); printList(pen, numbers); // Delete the first element pen.println("Deleting first"); Cursor c = numbers.front(); numbers.delete(c); pen.println(numbers.get(c)); printList(pen, numbers); // Delete the third element pen.println("Deleting third"); Cursor d = numbers.front(); numbers.advance(d); numbers.advance(d); numbers.delete(d); printList(pen, numbers); // Insert and get some elements Cursor f = strings.front(); // Insert into null list strings.insert("world", f); printList(pen, strings); pen.println(strings.get(f)); // Insert at front of list strings.insert("hello", f); // Expected output: // "[hello world ]/hello/world/hello/hello/[hello world ]" printList(pen, strings); pen.println(strings.get(f)); strings.advance(f); pen.println(strings.get(f)); if (strings.hasPrev(f)) { pen.println(strings.getPrev(f)); } else { pen.println("hasPrev false negative"); } strings.retreat(f); if (strings.hasPrev(f)) { pen.println("hasPrev false positive"); } pen.println(strings.get(f)); pen.flush(); printList(pen, strings); // Insert mid-list strings.advance(f); strings.insert("foo", f); printList(pen, strings); pen.println(strings.get(f)); strings.advance(f); strings.insert("bar", f); printList(pen, strings); pen.println(strings.get(f)); // Testing Swap /* * pen.println(); pen.println("Testing swap(c1, c2):"); * pen.print(" Current list: "); printList(pen, strings); Cursor s1 = * strings.front(); Cursor s2 = strings.front(); * * // Swap first two: * * * Thread.sleep(1000); System.out.println("ONE"); Thread.sleep(1000); * * strings.advance(s2); strings.swap(s1, s2); * pen.print(" [foo hello bar world ] = "); printList(pen, strings); * pen.println(" s1 = " + strings.get(s1) + "; s2 = " + * strings.get(s2)); * * Thread.sleep(1000); System.out.println("TWO"); Thread.sleep(1000); * * strings.advance(s1); * * strings.advance(s2); strings.advance(s2); pen.println(" s1 = " + * strings.get(s1) + "; s2 = " + strings.get(s2)); strings.swap(s1, s2); * pen.print(" [foo bar hello world ] = "); printList(pen, strings); * pen.print(" s1 = " + strings.get(s1) + "; s2 = " + * strings.get(s2)); */ // Testing Search pen.println(); pen.println("Testing search(c, pred):"); pen.print(" Current list: "); printList(pen, numbers); Cursor g = numbers.front(); Even even = new Even(); Seven seven = new Seven(); System.out.println(" cursor @ " + numbers.get(g)); System.out.println(" " + numbers.search(g, even)); System.out.println(" cursor @ " + numbers.get(g)); pen.print(" Current list: "); printList(pen, numbers); numbers.advance(g); System.out.println(" cursor @ " + numbers.get(g)); System.out.println(" " + numbers.search(g, even)); System.out.println(" cursor @ " + numbers.get(g)); pen.print(" Current list: "); printList(pen, numbers); System.out.println(" cursor @ " + numbers.get(g)); System.out.println(" " + numbers.search(g, seven)); System.out.println(" cursor @ " + numbers.get(g)); System.out.println(" cursor @ " + numbers.get(g)); System.out.println(" " + numbers.search(g, even)); System.out.println(" cursor @ " + numbers.get(g)); // Testing select /* Odd odd = new Odd(); pen.println("Testing select(pred):"); pen.print(" Current list: "); System.out.print("even numbers: "); DoublyLinkedList<T> sevens = (DoublyLinkedList) numbers.select(even); PrintList(pen, sevens); System.out.println("odd numbers: " + numbers.select(odd)); System.out.println("sevens: " + numbers.select(seven)); // And we're done pen.close(); */ } // main(String[])
public void testInsertAndRemove() { final DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>(); // 2 5 8 // 1* b2 5 8 // 1 2a *3 5 8 // 1 2 3 4* b5 8 // 1 2 3 4 5 7* b8 // 1 2 3 4 5 6* b7 8 // 1 2 3 4 5 6 7 8a *9 // 1 2 3 4 5 6 7 8 9a *10 // 0* b1 2 3 4 5 6 7 8 9 10 list.add(2).add(5).add(8); final DoublyLinkedList.LinkNode<Integer> node2 = list.find(2); node2.push(1); final DoublyLinkedList.LinkNode<Integer> node3 = node2.add(3); node3.getNext().push(4).find(8).add(9); list.add(10); list.getFirst().push(0); list.find(8).push(7).push(6); list.getLast().add(12); list.add(11, 11); list.add(13, 13); assertEquals(14, list.size()); for (int i = 0; i <= 13; ++i) { assertEquals("i=" + i, (Integer) i, list.get(i)); final DoublyLinkedList.LinkNode<Integer> node = list.getLinkNode(i); assertEquals(i, node.getIndex()); assertEquals((Integer) i, node.getElt()); } // test findNext final DoublyLinkedList.LinkNode<Integer> secondNode2 = list.add(2); final DoublyLinkedList.LinkNode<Integer> foundSecondNode2 = node2.findNext(); assertEquals(secondNode2, foundSecondNode2); assertNull(secondNode2.findNext()); secondNode2.add(3); // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 2 3 assertNull(secondNode2.findNext()); // test remove assertEquals(16, list.size()); assertEquals((Integer) 2, list.remove(14)); assertEquals(15, list.size()); assertEquals((Integer) 3, list.remove(14)); assertEquals(14, list.size()); for (int i = 0; i <= 13; ++i) { assertEquals("i=" + i, (Integer) i, list.get(i)); final DoublyLinkedList.LinkNode<Integer> node = list.getLinkNode(i); assertEquals(i, node.getIndex()); assertEquals((Integer) i, node.getElt()); } // completely drain the list for (int i = 0; i < 14; ++i) { assertEquals("i=" + i, (Integer) i, list.remove(0)); assertEquals(13 - i, list.size()); } }