这道题有两种方法:
1.设置两个指针,将他们之间的长度设置为 k(ps:我们把这两个指针定义为尺子)(当尺子末指针指向链表的末尾时,它的首指针就指向第K个节点),这里的重点是在循环时当i >= k时尺子的首指针再进行移动!
代码如下:
/*
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 p;
ListNode q;
p = head;
q= p;
int i = 0;
for(;p != null;i++){
if(i >= k)
q = q.next;
p = p.next;
}
if(i < k)
return null;
else
return q;
}
}
2.第二种方法是你需要遍历出链表的长度,然后遍历出你所需要的倒数第K个节点!
代码如下:
/*
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 p = head;
int n = 0;
while(p != null){
n++;
p = p.next;
}
ListNode q = head;
for(int i = 0;i < n-k;i++){
q = q.next;
}
if(n < k)
return null;
else
return q;
}
}