import java.util.Scanner;



public class DoubleLinkStuff {

	public static class Node {
		String info;
		Node prev;
		Node next;
		
		public Node(String str, Node pv, Node nt)
	    {
		   info = str;
		   prev = pv;
		   next = nt;
	    }
	}

	public Node addIter(Scanner in)
	{
		Node list = new Node(in.next(), null, null);
		Node current = list;
		while (in.hasNext())
		{
			// TODO: Finish body of loop

			
		}
		return list;
	}

	// print list in order
	public void print(Node list)
	{
		while (list != null)
		{
			System.out.print(list.info  + " ");
			list = list.next;
		}
		System.out.println();

	}

	// print list with prev and next pointers
	public void printDetail(Node list)
	{
		while (list != null)
		{
			if (list.prev != null )
				System.out.print("pr:" + list.prev.info + " ");
			System.out.print(list.info  + " ");
			if (list.next != null)
				System.out.print("nx:" + list.next.info + " ");
			list = list.next;
		}
		System.out.println();
	}
	
	// assume at least one node in list
	// print elements in reverse order, don't
	// use recursion
    public void printReverse(Node list)
    {
    	if (list == null)
    		return;
    	Node current = list;
    	// TODO: set current to last node in list


    	
    	// TODO: print elements in reverse order
 
    	
    }
    
    // move Node containing word to the front of the
    // list. If word is not found, then no changes 
    // in the list. 
    public Node moveToFront(Node list, String word)
    {
    	Node current = list;
    	while ((current != null) && (current.info.compareTo(word) != 0))
    	{
    		System.out.println("In loop info is " + current.info);
    		current = current.next;
    	}
    	if (current == null )
    		return list;
    	if (current == list)  // first node in list, don't move it
    		return list;
    	// FOUND Data item
    	// current references the node with word
    	// take it out of the list
    	// TODO: Remove node out of list and put at front


    	
    	return list;
    		
    }
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		DoubleLinkStuff stuff = new DoubleLinkStuff();
		
		// create doubly linked list for testing
		
		String data = "do re me fa so la";
		Scanner input = new Scanner(data);
		System.out.print("calling addIter: ");
		Node itemlist = stuff.addIter(input);		
		stuff.print(itemlist);		
		// print items in reverse nonrecursively
		System.out.print("calling printReverse: ");
		stuff.printReverse(itemlist);
		
        // test MoveToFront
		System.out.println("Move to front: fa");
		itemlist = stuff.moveToFront(itemlist, "fa");
		stuff.print(itemlist);
		stuff.printDetail(itemlist);
		System.out.println("Move to front: la");
		itemlist = stuff.moveToFront(itemlist, "la");
		stuff.print(itemlist);
		stuff.printDetail(itemlist);
		System.out.println("Move to front: do");
		itemlist = stuff.moveToFront(itemlist, "do");
		stuff.print(itemlist);
		System.out.println("Move to front: he");
		itemlist = stuff.moveToFront(itemlist, "he");
		stuff.print(itemlist);
		System.out.println("Move to front: me");
		itemlist = stuff.moveToFront(itemlist, "me");
		stuff.print(itemlist);
		System.out.println("Move to front: fa");
		itemlist = stuff.moveToFront(itemlist, "fa");
		stuff.print(itemlist);


	}

}
