Q: Find the kth to last element of a singly linked list
A:两个指针,第一个指针从头开始,遍历k-1步,第二个指针开始从头遍历,当第一个指针到最后时,第二个指针的元素就是想要的结果。
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode *init(int a[], int n) {
ListNode *head = NULL;
ListNode *p = NULL;
for (int i = 0; i < n; i++) {
ListNode *cur = new ListNode(a[i]);
if (i == 0) {
head = cur;
p = cur;
}
p->next = cur;
p = cur;
}
return head;
}
int kthToLast(ListNode *head, int k) {
ListNode *first = head;
ListNode *second = head;
for (int i = 0; i < k; i++) {
first = first->next;
}
while (first) {
first = first->next;
second = second->next;
}
return second->val;
}
int main() {
int a[10] = {1,5,2,6,7,4,6,2,8,9};
ListNode *head = init(a, 10);
cout<<kthToLast(head, 2)<<endl;
return 0;
}