输入一个链表,输出该链表中倒数第 k 个结点
解法一
使用一个 ArrayList 保存链表的所有结点,然后再直接取出目标结点
import java.util.List;
import java.util.ArrayList;
public class Solution {
private List<ListNode> list = new ArrayList<>();
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || head.next == null ||k <= 0) {
return null;
}
while(head != null) {
list.add(head);
head = head.next;
}
if(k > list.size()) {
return null;
}
return list.get(list.size() - k);
}
}
解法二
使用双指针的方式,指针 p 和 q 都先指向开始的节点,p 一直向后走,而 q 等到 p 走了 k 步再开始向后走,从这个时刻起 p 总是领先 q k 个位置,当 p 走到终点时,q 走到了倒数第 k 个节点
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null ||k <= 0) {
return null;
}
int count = 0;
ListNode p = head, q = head;
while(p != null) {
if(count >= k) {
q = q.next;
}
p = p.next;
count++;
}
return k > count ? null : q;
}
}
相关文章
暂无评论...