给定一个头节点为 head
的链表用于记录一系列核心肌群训练项目编号,请查找并返回倒数第 cnt
个训练项目编号。
示例 1:
输入:head = [2,4,7,8], cnt = 1 输出:8
提示:
1 <= head.length <= 100
0 <= head[i] <= 100
1 <= cnt <= head.length
解题思路
最简单直接的方法即为顺序查找,假设当前链表的长度为 n,则我们知道链表的倒数第 cnt 个节点即为正数第 n−cnt个节点,此时我们只需要顺序遍历到链表的第 n−cnt 个节点即为倒数第 cnt 个节点。
我们首先求出链表的长度 n,然后顺序遍历到链表的第 n−cnt 个节点返回即可。
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode trainingPlan(ListNode head, int cnt) {
ListNode p=head;
int i=1;
while(p.next!=null){
p=p.next;
i++;
}
p=head;
for(int j=0;j<i-cnt;j++){
p=p.next;
}
return p;
}
}
-
时间复杂度:O(n),其中 i为链表的长度。需要两次遍历。
-
空间复杂度:O(1)。