public Node quickSort(Node head){
        if(head == null || head.next == null){
            return head;
        }
        Node smaller = null;
        Node larger = null;
        Node pivot = head;
        Node temp = head.next;
        pivot.next = null;
        LinkList ll = new LinkList();
        while(temp != null){
            Node next = temp.next;
            temp.next = null;
            if(temp.data < pivot.data){
                smaller = ll.addAtFront(temp, smaller);
            }else{
                larger = ll.addAtFront(temp, larger);
            }
            temp = next;
        }
        
        smaller = quickSort(smaller);
        larger = quickSort(larger);
        
        Node tail1 = smaller;
        
        //this is costly operation which can be prevented by keeping tail.
        while(tail1 != null && tail1.next != null){
            tail1 = tail1.next;
        }
        
        if(smaller != null){
            tail1.next = pivot;
            pivot.next = larger;
            return smaller;
        }else{
            pivot.next = larger;
            return pivot;
        }
    }
http://www.geeksforgeeks.org/quicksort-on-singly-linked-list/
Test cases
0 1 or more nodes
sorted reverse sorted nodes
src/com/interview/linklist/QuickSortSingleLinkList.java