资讯详情

Day 10. 22. 链表中倒数第k个节点

22. 倒数第中倒数第k节点

文章目录

  • [22. 链表倒数第k节点](https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/)
    • 解题思路一
    • 解题思路二
    • 解题思路三

输入链表,输出链表中倒数第K节点。为了满足大多数人的习惯,这个问题从1开始计数,即链表的尾节点是倒数第一节点。 例如,链表有 6 从头节点开始,它们的值依次是 一、二、三、四、五、六。链表倒数第 3 节点值为 4 的节点。 示例: 给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5. 

解题思路一

暴力解法: 1.获取链表的元素数n 2.将head指针移动到n-k-1的位置上 
class Solution { 
         public:     ListNode* getKthFromEnd(ListNode* head, int k) { 
                 //方法1。也许数组的元素格式提取后面的值         int n = 0;         ListNode *temp = head;         while(temp != nullptr) { 
                     temp = temp->next;             n ;         }         for(int i = 0; i < n - k;  i){ 
                     head = head->next;         }         return head;     } };  

解题思路二

双指针: 1.定义一个slow指针和一个fast指针分别指向第一个元素和第k个元素 2.同时向后移动两个指针,直到fast空指针,结束 3.返回slow 
class Solution { 
         public:     ListNode* getKthFromEnd(ListNode* head, int k) { 
                 /方法二,双指针         ListNode *slow = head;         ListNode *fast = head;         for(int i = 0; i < k; ++i) { 
        
            fast = fast->next;
        }
        while(fast != nullptr) { 
        
            slow = slow->next;
            fast = fast->next;
        }
        return slow;
	}
};

解题思路三

将双指针进行改进,节省内存消耗。
class Solution { 
        
public:
    ListNode* getKthFromEnd(ListNode* head, int k) { 
        
		//将双指针进行改进,节省内存消耗。
        ListNode *fast = head;
        for(int i = 0; i < k; ++i) { 
        
            fast = fast->next;
        }
        while(fast != nullptr) { 
        
            head = head->next;
            fast = fast->next;
        }
        return head;
    }
};

标签: 风门开闭状态传感器kge22

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台