所谓的快慢指针就是两个指针同向而行,一快一慢。而由于数组中没有指针,一般使用索引下标来模拟指针。比较常见的出题类型有如下几种:删除重复元素,删除指定的元素类型。
删除重复元素
下面介绍的两道题主要是利用双指针的技巧来删除有序列表中的重复元素。
删除有序数组中的重复元素(LeetCode26)
public class RemoveDuplicate {
public int removeDuplicate(int[] nums) {
if (nums.length == 0) {
return 0;
}
int slow = 0;
int fast = 0;
while (fast < nums.length) {
if (nums[slow] != nums[fast]) {
slow++;
nums[slow] = nums[fast];
}
fast++;
}
return slow + 1;
}
}
删除排序链表中的重复元素(LeetCode83)
public class DeleteDuplicates {
public Node deleteDuplicate(Node head) {
if (head == null) {
return null;
}
Node slow = head;
Node fast = head;
while (fast != null) {
if (slow.value != fast.value) {
slow.next = fast;
slow = slow.next;
}
fast = fast.next;
}
return head;
}
}