Sunday, August 2, 2015

Linked List : Find middle element.

Find the middle element of the linked list.

Note: Use linked list created in this blog page: Singly Linked List

Logic:
Here we have two pointers in linked list, slow pointer (slowPointer) and fastpointer (fastPointer), slow pointer steps one node at a time but fast pointer steps 2 nodes at a time. slowPointer and fastPointer pointer keeps on traversing linked list till we reach end of linked list. At the end our slow pointer will be pointing to middle element of the linked list.
  
   public T FindMiddle()
        {
            Node fastPointer = this.Head;
            Node slowPointer = this.Head;

            while (fastPointer.next != null && fastPointer.next.next !=null)
            {
                fastPointer = fastPointer.next.next;
                slowPointer = slowPointer.next;
            }

            return slowPointer.content;

   }

Linked List : Reverse link list iteratively

Note: Use linked list created in this blog page: Singly Linked List
  
  public void Reverse()
       {
            Node current = this.Head;
            Node Next = null;
            Node Prev = null;

            while (current != null)
            {
                Next = current.next;
                current.next = Prev;
                Prev = current;
                current = Next;               
            } 
            this.Head = Prev; 
        }