赞
踩
两种解法
1.直接解法
先创建一个新的指针*p用于存放head,用p来求单链表长度,然后根据长度和给定k的值判断所求为正向第n个元素,循环n-1次找到对应值即可
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode(int x) : val(x), next(NULL) {}
- * };
- */
- class Solution {
- public:
- int kthToLast(ListNode* head, int k) {
-
- //新建指针
- ListNode* p;
- p=head;
- //单链表长度
- int len=0;
- //所求值
- int n=0;
-
- //遍历单链表,求链表长度
- while(p!=NULL)
- {
- len++;
- p=p->next;
- }
-
- //根据长度和给定k求所求值
- for(int i=0;i<len-k+1;i++)
- {
- n=head->val;
- head=head->next;
- }
-
- return n;
-
-
- }
- };
-
- 作者:kutu1bw-i
- 链接:https://leetcode.cn/problems/kth-node-from-end-of-list-lcci/solution/bao-li-jie-fa-by-kutu1bw-i-4ehf/
- 来源:力扣(LeetCode)
- 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2.双指针法
先创建两个指针(这里指左、右),先基于给定k,将右指针向右移动k-1次,使左指针与右指针相距为k-1,在同时移动左、右指针,当右指针到达链表底部时,所求即为左指针对应的值
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode(int x) : val(x), next(NULL) {}
- * };
- */
- class Solution {
- public:
- int kthToLast(ListNode* head, int k) {
-
- ListNode* p;
- p=head;
- // int len=0;
- // int n=0;
-
- while(k--)
- {
- p=p->next;
- }
-
- while(p!=NULL)
- {
- p=p->next;
- head=head->next;
- }
-
- return head->val;
-
-
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。