题目描述:
输入一个链表,输出该链表中倒数第k个结点。
解题思路:
定义两个指针(变量),刚开始都指向链表第一个节点;
然后第一个指针先进行一个循环走(K-1)步;
然后两个指针一起走,当第一个指针走到链表末尾的时候,第二个指针所指的位置就是倒数第K个节点。
//链表中倒数第k个结点
//输入一个链表,输出该链表中倒数第k个结点。
public class Solution18 {
public static class ListNode { //链表的结点类
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static ListNode FindKthToTail(ListNode head,int k) { //输入参数为链表和第K个结点
if(head==null||k<=0){
return null;
}
ListNode pre=head; //先让第一个指针和第二个指针都指向头结点
ListNode last=head;
//---------------------------------------------------------------------
for(int i=1;i<k;i++){ //然后再让第一个指针走(k-1)步,到达第k个节点
if(pre.next!=null){
pre=pre.next;
}else{
return null;
}
}
//---------------------------------------------------------------------
while(pre.next!=null){
//然后两个指针同时往后移动,当第一个指针到达末尾的时候,第二个指针所在位置就是倒数第k个节点了
pre = pre.next;
last=last.next;
}
// System.out.println("倒数第"+k+"个节点是:");
// System.out.println(last.val);
return last;
}
public static void main(String args[]){
ListNode a=new ListNode(6);
FindKthToTail(a,1);
}
}