刷题-Leetcode-剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/submissions/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目描述

在这里插入图片描述

题目分析

  1. 两次遍历-麻烦
    简单题。注意index的值,不是size-k+1。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
    
    
        int size = 0;
        ListNode* cur = head;
        while(cur != nullptr){
    
    
            size++;
            cur = cur->next;
        }
        cur = head;
        int index = size - k;
        while(index--){
    
    
            cur = cur->next;
        }
        return cur;
    }
};
  1. 一次遍历
    更好。
    快慢指针,双指针。
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
    
    
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* fast = dummy;
        ListNode* slow = dummy;
        for(int i = 1; i <= k ;i++){
    
    
            fast = fast->next;
        }
        while(fast != nullptr){
    
    
            slow = slow->next;
            fast = fast->next;
        }
        return slow;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_42771487/article/details/120592493