此题解法:
- 使用快慢指针法
- 定义两个指针 p 和 q ,p 指向头节点,q 先移动 k 步
- 然后 p 和 q 同时移动,当 q 移动到尾节点时,p 正好指向第 k 个节点
- 代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
ListNode p = head, q = head;
for (int i = 0; i < k; i++) {
q = q.next;
}
while (q != null) {
p = p.next;
q = q.next;
}
return p;
}
}
时间复杂度:O(n)
空间复杂度:O(1)