【Hackerrank】Get the value of the node at a specific position from the tail

来源:互联网 发布:学唱韩文歌的软件 编辑:程序博客网 时间:2024/06/07 03:52

You’re given the pointer to the head node of a linked list and a specific position. Counting backwards from the tail node of the linked list, get the value of the node at the given position. A position of 0 corresponds to the tail, 1 corresponds to the node before the tail and so on.

Input Format
You have to complete the int GetNode(Node* head, int positionFromTail) method which takes two arguments - the head of the linked list and the position of the node from the tail. positionFromTail will be at least 0 and less than the number of nodes in the list. You should NOT read any input from stdin/console.

Output Format
Find the node at the given position counting backwards from the tail. Then return the data contained in this node. Do NOT print anything to stdout/console.

Sample Input

1 -> 3 -> 5 -> 6 -> NULL, positionFromTail = 01 -> 3 -> 5 -> 6 -> NULL, positionFromTail = 2

Sample Output

63 c++ code :
#include <iostream>#include<cstdio>#include<cstdlib>using namespace std;struct Node{int data;Node *next;};/*  Get Nth element from the end in a linked list of integers  Number of elements in the list will always be greater than N.  Node is defined as   struct Node  {     int data;     struct Node *next;  }*/int GetNode(Node *head,int positionFromTail){  // This is a "method-only" submission.   // You only need to complete this method.     if(head == NULL)        return 0;    Node *first = head; Node *sec = head;    for(int i = 0; i < positionFromTail; i++)        sec = sec->next;    while(sec->next != NULL)    {        sec = sec->next;        first = first->next;    }    return first->data;}void Print(Node *head){bool ok = false;while(head != NULL){if(ok)cout<<" ";else ok = true;cout<<head->data;head = head->next;}}Node* Insert(Node *head,int x){   Node *temp = new Node();   temp->data = x;   temp->next = NULL;   if(head == NULL)    {       return temp;   }   Node *temp1;   for(temp1 = head;temp1->next!=NULL;temp1= temp1->next);   temp1->next = temp;return head;}int main(){int t;cin>>t;while(t-- >0){Node *A = NULL;int m;cin>>m;while(m--){int x; cin>>x;A = Insert(A,x);}int n;cin>>n;cout<<GetNode(A,n)<<"\n";}}


0 1