import java.util.Iterator;
import java.util.Scanner;

public class ReversableList<Item> implements Iterable<Item> {
    
    private class Node {
        Item item;
        Node next;
    }
   
    private Node first;
    
    public void add(Item item) {   
        Node node = new Node();
        node.item = item;
        node.next = first;
        first = node;   
    }
    
    public Iterator<Item> iterator() {
        return new Iterator<Item>() {
            Node node = first;
            
            public boolean hasNext() {
                return (node != null);
            }
            
            public Item next() {
                Item item = node.item;
                node = node.next;
                return item;
            }
        };
    }
    
    public String toString() {
        String str = "";
        for (Item s : this) {
            str += s + "->";
        }
        return str;
    }
    
    public void reverse() {
        if (first != null && first.next != null) {
            if (first.next.next == null) { // list has 2 elements
                Node b = first.next;
                b.next = first;
                first.next = null;
                first = b;
            }
            else { // list has 3 or more elements
                Node a = first;
                Node b = a.next;
                Node c = b.next;
                a.next = null;
                
                while (c.next != null) {
                    b.next = a;
                    a = b;
                    b = c;
                    c = b.next;
                }
                
                c.next = b;
                b.next = a;
                first = c;
            }
        }
        // else list has one or no elements and there is nothing to be done.
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner (System.in);
        System.out.print("Length of list to reverse? ");
        int n = scanner.nextInt();
        scanner.close();
        
        ReversableList<Integer> list = new ReversableList<Integer>();
        
        for (int i = n; i > 0; i--) {
            list.add(i);
        }
        
        System.out.println("list : " + list);
        
        list.reverse();
        System.out.println("reversed list : " + list);  
    }
}

