方法1:使用快慢指针,快指针先走k步,当k到结尾时,慢指针就是倒数第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) {
if(head == null )
return null;
ListNode fast = head;
ListNode slow = head;
for(int i=0;i<k;i++)
fast = fast.next;
while(fast != null){
slow = slow.next;
fast = fast.next;
}
return slow;
}
}
方法2:遍历链表,使用hashmap存储
**
* 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) {
if(head == null )
return null;
ListNode currNode = head;
Map<Integer,ListNode> map = new HashMap<>();
int i=1;
while(currNode != null){
map.put(i,currNode);
i++;
currNode = currNode.next;
}
return (ListNode)map.get(i-k);
}
}