From: sci.math on
<code> // Copyright © 2010 www.meami.org</br>
//</br>
// The information on this page may not be reproduced or
republished on another web page or web site unless done so by M. M.
Musatov (with the exception of Wikipedia).</br>
// M. M. Musatov, Meami.org, release this code for private non-
profit non-commercial use only - All Other Rights Reserved.</br>
//</br>
// #include <cassert></br>
// #include <climits></br>

// #include <cstdlib></br>
// #include <cstdio></br>
//</br>
// using namespace std;</br>
//</br>
// typedef struct node</br>
// {</br>

// int nElem;</br>
// struct node *pNextNode;</br>
// }Node;</br>
//</br>
//</br>
// int pushElem(Node **argpRoot, int argnElem)</br>
// {</br>

// Node *pNewNode;</br>
// pNewNode = (Node *)malloc(sizeof(Node));</br>
// if(!pNewNode)</br>
// {</br>
// fprintf(stderr,"\n\t ERR: Memory allocation failure
for Node \n");</br>
// return -1;</br>

// }</br>
//</br>
// pNewNode->nElem = argnElem;</br>
// pNewNode->pNextNode = NULL;</br>
// if(*argpRoot==NULL)</br>
// {</br>

// *argpRoot = pNewNode;</br>
// }</br>
// else</br>
// {</br>
// pNewNode->pNextNode = *argpRoot;</br>
// *argpRoot = pNewNode;</br>

// }</br>
// return 1;</br>
// }</br>
//</br>
//</br>
// int popElem(Node **argpRoot)</br>
// {</br>

// assert(*argpRoot!=NULL);</br>
// int nRetElem;</br>
// Node *pDeleteNode;</br>
// pDeleteNode = *argpRoot;</br>
// *argpRoot = (*argpRoot)->pNextNode;</br>
// nRetElem = pDeleteNode->nElem;</br>

// free(pDeleteNode);</br>
// return nRetElem;</br>
// }</br>
//</br>
// void deleteList(Node **argpRoot)</br>
// {</br>

// while(*argpRoot)</br>
// {</br>
// popElem(argpRoot);</br>
// }</br>
// }</br>
//</br>
// void printElems(Node *argpRoot)</br>

// {</br>
// //assert(argpRoot != NULL);</br>
// if(argpRoot!=NULL)</br>
// {</br>
// Node *pTempNode = argpRoot;</br>
// while(pTempNode->pNextNode)</br>

// {</br>
// fprintf(stdout,"%d->",pTempNode->nElem);</br>
// pTempNode = pTempNode->pNextNode;</br>
// }</br>
// fprintf(stdout,"%d",pTempNode->nElem);</br>
// }</br>

// }</br>
//</br>
// int findElemFromListEnd(Node *argpRoot,int nTargetPos,int
*argpnElem)</br>
// {</br>
// /*</br>
// assert(argpRoot!=NULL);</br>

// assert(nTargetPos <= INT_MAX && nTargetPos > 0);</br>
// assert(argpnElem!=NULL);</br>
// */</br>
//</br>
// if(argpRoot == NULL)</br>

// {</br>
// fprintf(stderr, "\n\t ERR: list is empty\n");</br>
// return -1;</br>
// }</br>
//</br>
// if((nTargetPos > INT_MAX) || (nTargetPos <= 0))</br>

// {</br>
// fprintf(stderr, "\n\t ERR: target position should be
<=INT_MAX and non-zero positive value\n");</br>
// return -1;</br>
// }</br>
//</br>
// if(argpnElem == NULL)</br>

// {</br>
// fprintf(stderr, "\n\t ERR: no memory allocated to
store the element at target position in the input list\n");</br>
// return -1;</br>
// }</br>
//</br>
// Node *pFwdNode,*pLagNode;</br>

// int nCurrentPos = 1;</br>
//</br>
// pFwdNode = argpRoot;</br>
// pLagNode = NULL;</br>
//</br>
// while(pFwdNode)</br>
// {</br>

// if(nCurrentPos == nTargetPos)</br>
// {</br>
// pLagNode = argpRoot;</br>
// break;</br>
// }</br>
// pFwdNode = pFwdNode->pNextNode;</br>

// nCurrentPos++;</br>
// }</br>
//</br>
// if(!pLagNode)</br>
// {</br>
// fprintf(stderr, "\n\t ERR: target position specified
is non-existent for the current list\n");</br>

// *argpnElem = -1;</br>
// return -1;</br>
// }</br>
//</br>
// while(pFwdNode->pNextNode)</br>
// {</br>

// pLagNode = pLagNode->pNextNode;</br>
// pFwdNode = pFwdNode->pNextNode;</br>
// }</br>
// *argpnElem = pLagNode->nElem;</br>
// return 1;</br>
// }</br>

// int main()</br>
// {</br>
// Node *pRoot = NULL;</br>
// int nNumElems = 0;</br>
// int nCurElem;</br>
// unsigned int unTestCaseId;</br>

// int nTargetPos;</br>
// int i;</br>
//</br>
// while(!feof(stdin))</br>
// {</br>
// fscanf(stdin,"---\n");</br>

// fprintf(stdout,"---\n");</br>
// fscanf(stdin,"NumOfElems :%d\n",&nNumElems);</br>
// fprintf(stdout,"NumOfElems :%d\n",nNumElems);</br>
// fflush(stdout);</br>
// for(i=0;i<nNumElems;i++)</br>
// {</br>

// fscanf(stdin,"%d,",&nCurElem);</br>
// pushElem(&pRoot,nCurElem);</br>
// }</br>
// printElems(pRoot);</br>
// fflush(stdout);</br>

// fscanf(stdin,"\nTarget Position :%d\n",&nTargetPos);</
br>
// fprintf(stdout,"\nTarget Position :%d\n",nTargetPos);</
br>
// fflush(stdout);</br>
// if(findElemFromListEnd(pRoot,nTargetPos,&nCurElem)<0)</
br>
// {</br>

// fprintf(stdout,"ERROR\n");</br>
//</br>
// }</br>
// else</br>
// {</br>
// fprintf(stdout,"Element:%d\n",nCurElem);</br>

// }</br>
// fscanf(stdin,"---\n");</br>
// fprintf(stdout,"---\n");</br>
// fflush(stdout);</br>
//</br>
// deleteList(&pRoot);</br>
// }</br>

// return 0;</br>
// }</br></code>