Eg: 1–>2–>3–>4–>5–>6–>7–>NULL
4th node to last should be: 4.
Just a simple two pointer problem.
int kthNodeToLast(ListNode* head, int k){
if(!head || !k) return -1;
ListNode* fast = head;
ListNode* slow = head;
while(fast){
while (k){
if(!fast) return -1;// k is larger than linked list's length.
fast = fast->next;
--k;
}
if(!fast) return slow->val; // k is equal to list's length;
else{ //k is smaller than list's length;
slow = slow->next;
fast = fast->next;
}
}
return slow->val;
}
int main(int argc, const char * argv[]) {
// insert code here...
ListNode * head = nullptr;
for ( int i = 7; i > 0; i-- ) {
insert(head, i);
}
cout << "List: ";
printList(head);
int k = 5;
cout << k<<"th node from last (Iterative) : ";
int node = kthNodeToLast(head, k);
if ( node ) {
cout << node << endl;
} else {
cout << "NULL NODE\n";
}
return 0;
}