ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

力扣LCR 140. 训练计划 II(顺序遍历,快慢指针)

2026/9/21 14:33:16 拓冰建站 浏览量
力扣LCR 140. 训练计划 II(顺序遍历,快慢指针)

Problem: LCR 140. 训练计划 II

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

思路1:顺序遍历

欲返回倒数第cnt个节点则需要顺序遍历到len-cnt(其中len为链表的长度)

思路2:快慢指针

让一个快指针fast指向cnt + 1个节点,慢指针slow指向头节点,再同时后移动,当快指针为空时,则慢指针指向的为倒数cnt号节点

复杂度

思路1:
时间复杂度:

O ( n ) O(n) O(n);其中 n n n为链表的长度

空间复杂度:

O ( 1 ) O(1) O(1)

思路2:
时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( 1 ) O(1) O(1)

Code

思路1:

class Solution {
public:/*** Sequential search** @param head The head node of linked list* @param cnt Given number* @return ListNode**/ListNode* trainingPlan(ListNode* head, int cnt) {int len = 0;ListNode* p = head;while (p != nullptr) {p = p -> next;len++;}p = head;for (int i = 0; i < len - cnt; ++i) {p = p -> next;}return p;}
};

思路2:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:/***Fast and slow pointer** @param head The head node of linked list* @param cnt Given number* @return ListNode**/ListNode* trainingPlan(ListNode* head, int cnt) {ListNode* fast = head;ListNode* slow = head;for (int i = 0; i < cnt; ++i) {fast = fast -> next;}while (fast != nullptr) {fast = fast -> next;slow = slow -> next;}return slow;}
};