当前位置:   article > 正文

【LeetCode刷题(简单程度)】面试题 02.02. 返回倒数第 k 个节点_leetcode刷到什么程度

leetcode刷到什么程度

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

注意:本题相对原题稍作改动

示例:

输入: 1->2->3->4->5 和 k = 2
输出: 4
说明:

给定的 k 保证是有效的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-node-from-end-of-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路1:无脑搞先,利用栈的FILO将链表反序233333。

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. int kthToLast(ListNode* head, int k) {
  12. stack<int>s;
  13. ListNode *p = head;
  14. while(p)
  15. {
  16. s.push(p->val);
  17. p = p->next;
  18. }
  19. for(int i = 1;i < k;++i)
  20. {
  21. s.pop();
  22. }
  23. return s.top();
  24. }
  25. };

思路2:快慢指针,p1和p2首先都指向head,然后p1先遍历到第k个,遍历到第k个之后p2再和p1一起遍历,等p1遍历完的时候,p2刚好指向倒数第k个节点。(O(n))

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. int kthToLast(ListNode* head, int k) {
  12. ListNode *p1 = head;
  13. ListNode *p2 = head;
  14. for(int i = 0;i<k;i++)
  15. p1 = p1->next;
  16. while(p1)
  17. {
  18. p1 = p1->next;
  19. p2 = p2->next;
  20. }
  21. return p2->val;
  22. }
  23. };

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/758822
推荐阅读
相关标签
  

闽ICP备14008679号