剑指offer面试题6:从尾到头打印链表

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

题目:

输入一个链表的头节点,从尾到头反过来打印出每个节点的值。链表节点定义如下:

struct ListNode{
	int m_nkey;
	ListNode* m_pnext;
}

思路:

个人:就是先从头遍历一边整个链表把节点的值存在栈里面,最后在从栈里面弹出值。

书:是由上面栈的结构联想到递归实现,因为递归的本质就是一个栈结构,就是当我们每访问到一个节点的时候,先递归输出他后面的节点,再输出该节点本身。

代码:

/*栈实现*/
void PrintListNode(ListNode* pHead){
	stack<int> value;
    
    ListNode* pNode = pHead;
    while(pNode!=nullptr){
        value.push(pNode->m_nkey);
        pNode = pNode->m_pnext;
    }
    
    while(!value.empty()){
        cout<<value.top()<<" ";
        value.pop();
    }
}


/*递归实现*/
void PrintListNode(ListNode* pHead){
	if(pHead==nullptr)
        return ;
    PrintListNode(pHead->m_pnext);
    cout<<pHead->value<<" ";
}
/*递归的不好就是,当链表非常的长,就会导致函数调用的层级很深,从而导致函数调用栈溢出*/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值