剑指offer——链表中倒数最后K个结点

题目描述:输入一个链表,输出该链表中倒数第K个结点。

例如输入{1,2,3,4,5},2时,对应的链表结构如下:

其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(即结点值为4的地方),系统会打印后面所有的结点来比较 。

示例一:

输入:{1,2,3,4,5},2

返回值:{4,5}

说明:返回倒数第2个结点值4,系统会打印后面所有的结点来比较

示例二:

输入:{2},8

返回值:{}

思路及解答:

采用指针,这里使用前后双指针,先让第一个指针走K步,然后第二个指针开始走,两个指针一起走,直到第一个指针走到最后的位置。

 剑指offer——链表中倒数最后K个结点_第1张图片

 剑指offer——链表中倒数最后K个结点_第2张图片

 Java代码实现如下:

/*
public class ListNode{
    int val;
    ListNode next = null;
    ListNode(int val){
        this.val = val;
    }
}*/
public class Solution{
    public ListNode FindKthToTail(ListNode head,int k){
        if(head == null || k <= 0){
            return null;
        }
        ListNode first = head;
        while(k != 0){
            if(first == null){
                return null;
            }
            first = first.next;
            k--;
        }
        while(first != null){
            head = head.next;
            first = first.next;
        }
        return head;
    }
}

时间复杂度:第一个指针走到末尾,O(n);空间复杂度:没有借助额外的空间,所以为O(1)。

你可能感兴趣的:(剑指offer刷题,链表,数据结构,算法,leetcode,职场和发展,intellij-idea,java)