之前面试时被别人问起过这个的算法,当时不知道是由于紧张还是笨了,没写出来。这次自己在电脑上写,大概花了20min,锻炼一下吧,代码如下:
typedef struct TLinkNode{
char c;
struct TLinkNode *next;
}LinkNode;
void reverseLink(LinkNode ** ppLn)
{
if (!*ppLn)
{
return ; // there is no node in list
}
LinkNode* lstOld = *ppLn;
LinkNode * p, *q;
p = lstOld;
if (!p->next)
{
return ; // only one node;
}
q = p->next;
p->next = NULL;
LinkNode * lpTmp ;
while(q)
{
lpTmp = q->next;
q->next = p;
p = q;
q = lpTmp;
}
*ppLn = p;
}
int _tmain(int argc, _TCHAR* argv[])
{
LinkNode *lstHead = NULL;
for (char c = 'a'; c<='z'; ++c)
{
if (lstHead)
{
LinkNode* lnTmp = new LinkNode;
lnTmp->c = c;
lnTmp->next = lstHead;
lstHead = lnTmp;
}
else
{
lstHead = new LinkNode;
lstHead->c = c;
lstHead->next = NULL;
}
}
reverseLink(&lstHead);
return 0;
}
以前没写过这个,这次写时发现,遇到问题时,还是要先将问题分解成小规模的,然后在想算法,比较容易的!