ListNode slow, fast;
slow = fast = head;while(k -->0){
fast = fast.next;}while(fast != null){
fast = fast.next;
slow = slow.next;}return slow;
左右指针
左右指针在数组中实际是指两个索引值
初始化left = 0, right = nums.length - 1
二分查找
intBinarySearch(int[] nums,int target){int left =0;int right = nums.length -1;while(left <= right){int mid = left +(right - left)/2;if(nums[mid]== target){return mid;}elseif(nums[mid]< target){
left = mid +1;}elseif(nums[mid]> target){
right = mid -1;}}return-1;}
两数之和
只要数组有序,就应该使用双指针技巧
通过调节left和right可以调整sum的大小
inttwoSum(int[] nums,int target){int left =0, right = nums.length -1;while(left < right){int sum = nums[left]+ nums[right];if(sum == target){return new int[]{left +1, right +1};}elseif(sum < target){
left++;}elseif(sum > target){
right--;}}return new int[]{-1,-1};}
反转数组
voidreverse(int[] nums){int left =0;int right = nums.length -1;while(left < right){// 转换数组左指针和右指针的元素int temp = nums[left];
nums[left]= nums[right];
nums[right]= temp;
left++;
right--;}}