### Nth node from last in linked list

Find the Nth node from the last in a linked list.
`/*`
` * NthToLastNode.cpp`
` *`
` *  Created on: Apr 18, 2012`
` *      Author: Kiran Hegde`
` */`

`#include <iostream>`
`#include <cstdlib>`
`#include <time.h>`

`using namespace std;`

`struct Node {`
`    int data;`
`    Node *next;`
`};`

`/**`
` * Generate a linked list of size containing random numbers from 0 to 9`
` */`
`Node *createLinkedList(int size) {`
`    srand(time(NULL));`
`    Node *head = NULL;`
`    for (int i = 0; i < size; i++) {`
`        Node *node = new Node;`
`        node->data = rand() % 10;`
`        node->next = head;`
`        head = node;`
`    }`
`    return head;`
`}`

`void deleteLinkedList(Node *head) {`
`    while (head != NULL) {`
`        Node *temp = head;`
`        head = head->next;`
`        delete temp;`
`    }`
`}`

`void printLinkedList(Node *head) {`
`    Node *curr = head;`
`    while (curr != NULL) {`
`        cout << curr->data << "-->";`
`        curr = curr->next;`
`    }`
`    cout << "EMPTY" << endl;`
`}`

`Node *findNthToLastNode(Node *head, int N) {`
`    Node *p1 = head;`
`    Node *p2 = head;`
`    if (p2 == NULL)`
`        return NULL;`
`    //Move p2 N nodes into the list`
`    int count=0;`
`    while (count < N) {`
`        p2 = p2->next;`
`        count ++;`
`        if (p2 == NULL)`
`            return NULL;`
`    }`
`    //Now move both nodes till p2 reaches the end of list`
`    while (p2 != NULL) {`
`        p1 = p1->next;`
`        p2 = p2->next;`
`    }`
`    return p1;`
`}`

`/**`
` * Test the code`
` */`
`int main() {`
`    Node *head = createLinkedList(15);`
`    cout << "Original List: ";`
`    printLinkedList(head);`
`    int randNum = (rand() % 10) + 1; // random number between 1 and 10`
`    Node *nthToLast = findNthToLastNode(head, randNum);`
`    cout << randNum << "th node from the last: = " << nthToLast->data << endl;`
`    deleteLinkedList(head);`
`    return 0;`
`}`