1.题目
输入一个链表,输出该链表中倒数第k个结点。
如,输入:1,{1,2,3,4,5};返回:{5}
2.思路
方法一:我首先想到的是存入hashmap,然后直接对应键值来取值,由于是倒数的,所以要有长度记录
从0开始储存,记录长度为len,则找倒数第k个就是(len-k)个
时间复杂度:O(n),空间复杂度:O(n)
import java.util.*;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
HashMap<Integer,ListNode> map=new HashMap<>();
int len=0;//起始位置
while(head!=null){
map.put(len,head);
head=head.next;
++len;//记录链表长度
}
return map.get(len-k);
}
}方法二:快慢指针
快指针先走 k-1 步,到达第 k 个节点。
然后两指针同时齐步走,当快指针到达末尾时,慢指针在倒数第 k 个节点上。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
int index=k;
int count=0;//记录链表长度
ListNode fast=head;//快指针
ListNode slow=head;//慢指针
while(fast!=null){
fast=fast.next;
count++;
if(index<1){
slow=slow.next;
}
--index;
}
if(k>count) return null;//如果目标位置大于链表长度
return slow;
}
}
京公网安备 11010502036488号