题目描述:输入一个链表的头结点,从尾到头反过来打印出每个节点的值
创新互联建站成立于2013年,我们提供高端成都网站建设公司、重庆网站制作、成都网站设计公司、网站定制、全网营销推广、小程序开发、微信公众号开发、营销推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为三维植被网企业提供源源不断的流量和订单咨询。链表的节点定义如下:
struct ListNode { int m_nValue; ListNode* m_pNext; };
分析:
一般情况下,遇到这种问题,首先应该问清楚面试官是否可以改变原有的链表结构,自己再做分析。
void PrintListReversingly_Iteratively(ListNode* pHead) { std::stacknodes; ListNode* pNode = pHead; while(pNode != NULL) { nodes.push(pNode); pNode = pNode->m_pNext; } while(!nodes.empty()) { pNode = nodes.top(); printf("%d\t", pNode->m_nValue); nodes.pop(); } }
void PrintListReversingly_Recursively(ListNode* pHead) { if(pHead != NULL) { if (pHead->m_pNext != NULL) { PrintListReversingly_Recursively(pHead->m_pNext); } printf("%d\t", pHead->m_nValue); } }
说明:用递归的代码看起来很简洁,但是如果一个链表非常长,于是递归调用的深度越深,就有可能导致栈溢出,因此利用循环实现的代码的鲁棒性(健壮性)会更好些。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。