题目描述
输入一个链表,输出该链表中倒数第k个结点。
1、思路分析
使用左右两个指针,一开始left和right均指向头结点,left保持不变,right向右移动k-1次,外层循环控制移动次数,循环体中每次循环时判断right是否为空,如果为空,直接返回null,否则继续移动。第一次循环结束后,需要再次判断最后一次移动后right是否为空。第二次循环同时移动左右两个结点,注意,这时需要判断的是right是否是链表的最后一个结点,因此判断条件为right.null != 0,正是这里错了所以一直未提交成功,需要特别注意每次判断的目的是什么。最后返回left就好。
2、代码
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { ListNode left = head; ListNode right = head; int i = k-1; while(i-- != 0) { if(right != null) { right = right.next; } else return null; } if(right == null) return null; while(right.next != null) { left = left.next; right = right.next; } return left; } }