1. 程式人生 > >[劍指offer] --14.連結串列中倒數第k個結點

[劍指offer] --14.連結串列中倒數第k個結點

題目描述

輸入一個連結串列,輸出該連結串列中倒數第k個結點。

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {

    }
}

解題思路

  • 兩個指標,先讓第一個指標和第二個指標都指向頭結點,然後再讓第一個指正走(k-1)步,
  • 到達第k個節點之後,兩個指標同時往後移動,
  • 當第一個結點到達末尾的時候,第二個結點所在位置就是倒數第k個節點了
public class Solution15 {

    public ListNode FindKthToTail(ListNode head,int k) {
        if (head==null||k==0){
            return null;
        }
        ListNode pre = head;
        ListNode behind = head;
        for (int i=1;i<k;i++){
            if (pre.next!= null) {
                pre = pre.next;
            } else {
                return null;
            }
        }
        while (pre.next!=null){
            pre = pre.next;
            behind = behind.next;
        }
        return behind;
    }
    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
}