【剑指offer】链表中倒数第K个结点

来源:互联网 发布:千度云秒赞源码 编辑:程序博客网 时间:2024/06/08 12:38

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

思路
首先确定,若一共有n个节点,链表中倒数第K个节点的指针为n-k+1。我们要实现的是遍历一次链表就能找到这个结点,这种情况下可以定义两个指针,两个指针开始都指向首结点,然后第一个指针向前走k-1步到达k结点,此时两个指针相距k-1,当第一个指针走到链表的尾结点n时,第二个指针的刚好走到n-(k-1),即(n-k+1)结点。
还要考虑边界情况,首结点为空,k小于等于0,和链表长度小于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) {        if (head == null || k <= 0){            return null;        }        ListNode ahead = head;        for (int i = 1; i < k ; i++){            if (ahead.next != null)                ahead = ahead.next;            else                 return null;        }        ListNode last = head;        while (ahead.next != null){            ahead = ahead.next;            last = last.next;        }        return last;    }}
原创粉丝点击