倒数第K个节点。思路清晰
链表指针的解法中使用前后指针技巧
思路:
- 首先让前指针先走K步
- 此时后指针还在head处,那么两者之间的差距就是题目中k步
- 这时候让后指针和前指针共同走。当前指针走到链表结尾处,后指针正好就是倒数第k个节点
注意点:
- 链表可能只有长度5,但是题目可能需要倒数第10个节点,显然不可能,会出现空指针。所以需要对空指针进行判空。
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head == null) return null; ListNode pre = head;//前指针 ListNode cur = head;//后指针 while(pre != null && (k--)!=0){ //防止越界出现空指针 pre = pre.next; } //当走到这里的时候,pre可能是因为出现空指针提前结束了,所以进行判断。只有k还没减到0的时候pre又==null,才表示提前结束 if(pre == null && k != 0) return null; while(pre != null) { pre = pre.next; cur = cur.next; } return cur;