static void PrintSingleLinkedList(SingleLinkedListNode node, string sep, TextWriter textWriter)
        {
            while (node != null)
            {
                textWriter.Write(node.data);

                node = node.next;

                if (node != null)
                {
                    textWriter.Write(sep);
                }
            }
        }
        public void ReverseList(SingleLinkedListNode head, IList <int> result)
        {
            if (result == null)
            {
                result = new List <int>();
            }
            if (head == null)
            {
                return;
            }

            ReverseList(head.next, result);
            result.Add(head.data);
        }
        public void InsertNode(int nodeData)
        {
            SingleLinkedListNode node = new SingleLinkedListNode(nodeData);

            if (this.head == null)
            {
                this.head = node;
            }
            else
            {
                this.tail.next = node;
            }

            this.tail = node;
        }
        public SingleLinkedListNode InsertNodeAtHead(SingleLinkedListNode llist, int data)
        {
            var item = new SingleLinkedListNode(data);

            if (llist == null)
            {
                llist = item;
            }
            else
            {
                var tmp = llist;
                llist      = item;
                llist.next = tmp;
            }
            return(llist);
        }
        public SingleLinkedListNode InsertNodeAtPosition(SingleLinkedListNode head, int data, int position)
        {
            var cursor   = 0;
            var current  = head;
            var previous = current;

            while (position != cursor)
            {
                cursor++;
                previous = current;
                current  = current.next;
            }
            //handle 0 though
            previous.next      = new SingleLinkedListNode(data);
            previous.next.next = current;
            return(head);
        }
 public SingleLinkedList()
 {
     this.head = null;
     this.tail = null;
 }