public LLNode sortLL012(LLNode head) {
		int count=LinkedList.getSize(head);
		
		LLNode tail = LinkedList.getTailNode(head);
		LLNode tmpNode = head, prevNode = null;
		
		for(int i=0; i<count; i++) {
			// append 2 at the end
			if(tmpNode.data == 2) {
				tail.next = tmpNode;
				if(prevNode != null) {
					prevNode.next = tmpNode.next;
					tmpNode = tmpNode.next;
				} else {
					head = tmpNode.next;
					tmpNode = head;
				}
				tail.next.next = null;
				tail = tail.next;
			} else if(tmpNode.data == 1) {
				prevNode = tmpNode;
				tmpNode = tmpNode.next;
			} else {
				if(head == tmpNode && prevNode == null) {
					prevNode = tmpNode;
					tmpNode = tmpNode.next;
				}
				else {
					prevNode.next = tmpNode.next;
					tmpNode.next = head;
					head = tmpNode;
					tmpNode = prevNode.next;
				}
			}
		}
		return head;
	}