思路:递归。形式为(输出该数据之后的链表值)+输出这个数据。
值得一提的是,如果带有头节点的单链表,需要前行前行一位,使链表指向开始节点。代码如下:
void printDeverse_main(LinkList List)
{
List = List->next;//起始为开始节点
printDeverse(List);
}
我的递归代码:
void printDeverse(LinkList List)
{
if (List == NULL)
{
return;
}
if (List->next != NULL)
{
printDeverse(List->next);
cout << " " << List->data;
}
if (List->next == NULL)
{
cout<< List->data;
}
}
标准答案显得更加简洁:
void reprint(LinkList List)
{
if (List != NULL)
{
reprint(List->next);
cout << List->data << " ";
}
}
分析:
我的递归,是挺教条的。
1.首先考虑一般情况,输出完这个数据后,则应该再次调用该函数
if (List->next != NULL)
{
printDeverse(List->next);
cout << " " << List->data;
}
2.如果输出完后没有这个数据,则调用:
if (List->next == NULL)
{
cout<< List->data;
}
3.如果链表为空,则:
if (List == NULL)
{
return;
}
其实这三种情况,概况起来就是标准答案,如果链表不空,就调用递归,并输出该数据。如果链表空了,就不作为。简洁明了。我的就过于冗余了。