题目描述
输入一个链表,输出该链表中倒数第k个结点
思路:为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针:
非法条件是:判断数字和链表
(1)第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;
(2)从第k步开始,第二个指针也开始从链表的头指针开始遍历;
(3)由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。
public class coding2 {
public static ListNode FindKthToTail(ListNode head,int k) {
ListNode temp1=head;
ListNode temp2=head;
//
if(head==null || k<=0){
return null;
}
for(int i=1;i<k;i++){
if(temp1.next!=null){
temp1=temp1.next;
}else {
return null;
}
}
while (temp1.next!=null){
temp1=temp1.next;
temp2=temp2.next;
}
return temp2;
}
public static void main(String[] args) {
ListNode s1=new ListNode(1);
ListNode s2=new ListNode(2);
ListNode s3=new ListNode(3);
ListNode s4=new ListNode(4);
ListNode s5=new ListNode(5);
s1.next=s2;
s2.next=s3;
s3.next=s4;
s4.next=s5;
s5.next=null;
System.out.println(FindKthToTail(s1,2));
}
}