题目
输入一个链表,输出该链表中倒数第k个结点。
题解
- 思路:快慢指针法
- 1.首先考虑链表为空、非法输入、节点个数小于k三种情况
- 2.用两个指针先让两个指针保持一个间隔为k的距离,其中处理节点个数小于k的情况
- 3.让两个指针同步向后移动,当在前的指针走位最后一个节点时,在后的指针正好走到倒数第k个节点位置
- 4.返回节点
- 代码
/*
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 leftnode = head;
ListNode rightnode = leftnode;
//移动right指针使两个指针距离为n
while(k>1){
rightnode = rightnode.next;
//链表节点数小于k
if(rightnode == null){
return null;
}
k--;
}
//两个指针同时往前走 当right指针走到链表尾部时,left指针指向链表倒数第n个元素
while (rightnode.next != null){
rightnode = rightnode.next;
leftnode = leftnode.next;
}
//返回倒数第n个元素
return leftnode;
}
}
- 结果