雙指標相關演算法

測試狗一枚發表於2020-12-02

 

一、使用雙指標的場景

1、第一個指標和第二個指標不同步的時候需要使用雙指標

2、分別使用雙指標指向頭和尾

二、雙指標的型別

 

1、陣列使用雙指標

注:使用下標作為指標

給定一個陣列 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]

class Solution {
    public void moveZeroes(int[] nums) {
        int j = 0;
        for(int i = 0; i< nums.length; i++){
            if(nums[i]!=0){
                nums[j++] = nums[i];
            }
        }
        for(int i = j; j < nums.length; j++){
            nums[j] = 0;
        }
    }
}

2、單連結串列使用雙指標

注:使用單連結串列的節點作為指標

例題:實現一種演算法,找出單向連結串列中倒數第 k 個節點。返回該節點的值。

輸入: 1->2->3->4->5 和 k = 2
輸出: 4

class Solution {
    public int kthToLast(ListNode head, int k) {
        ListNode firstNode = head;
        ListNode secondNode = head;
        while(k-- > 0){
            firstNode = firstNode.next;
        }
        while(firstNode!=null){
            firstNode = firstNode.next;
            secondNode = secondNode.next;
        }
        return secondNode.val;
    }
}

 

相關文章