public static boolean isPalindrome(ListNode head) throws IllegalArgumentException {
		
		if (head == null) {
			throw new IllegalArgumentException();
		}
		
		if (head.next == null) {
			return true;
		}
		/* Get middle point of the list */
		ListNode ptr1 = head;
		ListNode ptr2 = head;
		while (ptr2 != null && ptr2.next != null) {
			ptr1 = ptr1.next;
			ptr2 = ptr2.next.next;			
		}
		
		/* Reverse second half */
		ListNode r = ReverseLinkedList.reverseList(ptr1);
		ptr1 = head;
		while (ptr1 != r) {
			if (ptr1.data != r.data) {
				return false;
			}
			ptr1 = ptr1.next;
			r = r.next;
		}
		
		return true;
		
	}