面试题5:从尾到头打印链表

 1 /*1.递归解决*/
 2 bool reversePrintA(List_Node * listNode)
 3 {
 4     if(NULL == listNode)
 5     {
 6         return false;
 7     }
 8 
 9     if(NULL != listNode->next)
10     {
11         reversePrintA(listNode->next);
12     }
13     printf("%d\n", listNode->value);
14     return true;
15 }
16 /*2.使用栈*/
17 bool reversePrintB(List_Node * listNode)
18 {    
19     int listNum = 0;
20     int listValue[30];
21 
22     if(NULL == listNode)
23     {
24         return false;
25     }
26 
27     while(listNode->next != NULL)
28     {
29         listValue[listNum++] = listNode->value;
30         listNode = listNode->next;
31     }
32 
33     listValue[listNum] = listNode->value;
34 
35     for(;listNum >= 0; listNum--)
36     {
37         printf("%d\n", listValue[listNum]);
38     }
39 
40     return true;
41 }

  使用递归的好处是:代码简洁;但是链表过大,嵌套过深,会导致栈溢出;使用栈的好处是:不需要担心栈溢出,典型的空间换时间,需要额外的存储空间。

posted @ 2015-06-07 19:59  制造天堂  阅读(177)  评论(0编辑  收藏  举报