双指针技巧,主要用于链表和有序数组
给定一个有序数组和一个目标值,找出数组中和为目标值的两个数,并且打印出来
使用双指针,也就是设置一个头指针和尾指针
int find(int arr[], int target){int left = 0;//头指针int right = arr.length - 1;// 尾指针while(left < right){if(left + right == target){// 找到目标数,进行打印,这里我就不执行打印操作两}else if(left + right < target){left ++;}else{right --;}}}
判断单链表是否有环
设置一个慢指针和一个快指针来遍历这个链表。慢指针一次移动一个节点,而快指针一次移动两个节点,如果该链表没有环,则快指针会先遍历完这个表,如果有环,则快指针会在第二次遍历时和慢指针相遇。
如何一次遍历就找到链表中间位置节点
设置一个快指针和慢指针。慢的一次移动一个节点,而快的两个。在遍历链表的时候,当快指针遍历完成时,慢指针刚好达到中点。
单链表中倒数第 k 个节点
设置两个指针,其中一个指针先移动k个节点。之后两个指针以相同速度移动。当那个先移动的指针遍历完成的时候,第二个指针正好处于倒数第k个节点。
