当前位置:   article > 正文

每日一题 Leetcode 面试题02.02

每日一题 Leetcode 面试题02.02

两种解法

1.直接解法

先创建一个新的指针*p用于存放head,用p来求单链表长度,然后根据长度和给定k的值判断所求为正向第n个元素,循环n-1次找到对应值即可

  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. //新建指针
  13. ListNode* p;
  14. p=head;
  15. //单链表长度
  16. int len=0;
  17. //所求值
  18. int n=0;
  19. //遍历单链表,求链表长度
  20. while(p!=NULL)
  21. {
  22. len++;
  23. p=p->next;
  24. }
  25. //根据长度和给定k求所求值
  26. for(int i=0;i<len-k+1;i++)
  27. {
  28. n=head->val;
  29. head=head->next;
  30. }
  31. return n;
  32. }
  33. };
  34. 作者:kutu1bw-i
  35. 链接:https://leetcode.cn/problems/kth-node-from-end-of-list-lcci/solution/bao-li-jie-fa-by-kutu1bw-i-4ehf/
  36. 来源:力扣(LeetCode)
  37. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.双指针法

先创建两个指针(这里指左、右),先基于给定k,将右指针向右移动k-1次,使左指针与右指针相距为k-1,在同时移动左、右指针,当右指针到达链表底部时,所求即为左指针对应的值

  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* p;
  13. p=head;
  14. // int len=0;
  15. // int n=0;
  16. while(k--)
  17. {
  18. p=p->next;
  19. }
  20. while(p!=NULL)
  21. {
  22. p=p->next;
  23. head=head->next;
  24. }
  25. return head->val;
  26. }
  27. };

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

闽ICP备14008679号