题目描述:输入一个链表,输出该链表中倒数第k个结点。
思路:定义一快一慢两个指针,快指针走K步,然后慢指针开始走,快指针到尾 时,慢指针就找到了倒数第K个节点。
package Function;
import Test.ListNode;
public class findKthToTail22 {
public static ListNode getReciprocalK(ListNode linkNode, int k){
//头指针
ListNode head=linkNode;
//与头指针相隔k的尾指针
ListNode behind=null;
//让头指针与尾指针相隔距离为k
for (int i=0;i<k-1;i++){
head=head.next;
}
behind=linkNode;
//头指针和尾指针一同向下遍历,只到头指针到达链表尾节点
while (head.next!=null){
head=head.next;
behind=behind.next;
}
return behind;
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
ListNode p1 = new ListNode(2);
ListNode p2 = new ListNode(3);
ListNode p3 = new ListNode(4);
ListNode p4 = new ListNode(5);
head.next=p1;
p1.next=p2;
p2.next=p3;
p3.next=p4;
ListNode reciprocalK = getReciprocalK(head, 4);
System.out.println(reciprocalK.val);
}
}