双指针技巧,主要用于链表有序数组

给定一个有序数组和一个目标值,找出数组中和为目标值的两个数,并且打印出来

使用双指针,也就是设置一个头指针和尾指针

  1. int find(int arr[], int target){
  2. int left = 0;//头指针
  3. int right = arr.length - 1;// 尾指针
  4. while(left < right){
  5. if(left + right == target){
  6. // 找到目标数,进行打印,这里我就不执行打印操作两
  7. }else if(left + right < target){
  8. left ++;
  9. }else{
  10. right --;
  11. }
  12. }
  13. }

判断单链表是否有环

设置一个慢指针和一个快指针来遍历这个链表。慢指针一次移动一个节点,而快指针一次移动两个节点,如果该链表没有环,则快指针会先遍历完这个表,如果有环,则快指针会在第二次遍历时和慢指针相遇。

如何一次遍历就找到链表中间位置节点

设置一个快指针和慢指针。慢的一次移动一个节点,而快的两个。在遍历链表的时候,当快指针遍历完成时,慢指针刚好达到中点。

单链表中倒数第 k 个节点

设置两个指针,其中一个指针先移动k个节点。之后两个指针以相同速度移动。当那个先移动的指针遍历完成的时候,第二个指针正好处于倒数第k个节点。