public ListNode reverseKGroup(ListNode head, int k) {
		if(k == 1) return head;
		ListNode preEnd = null, start = head, nextStart = null, cur = head;
		int has = 0;
		while(cur != null) {
			has++;
			if(has == k) {
				nextStart = cur.next;
				reverse(start, cur);
				if(preEnd == null) head = cur;
				else preEnd.next = cur;
				preEnd = start;
				start.next = nextStart;
				
				has = 0;
				start = nextStart;
				cur = start; // bug, forgot in 1st try
			} else cur = cur.next;
		}
		return head;
	}