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

题目

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

struct ListNode{
	int m_nKey;
	ListNode* m_pNext;
};

分析

单链表的结构只能允许从头到尾访问元素,而输出的要求确是从尾到头,所以自然想到用栈结构。让链表中的元素以此入栈,然后再退栈,就能实现逆序。

#include <iostream>
#include <stack>
using namespace std;

struct  ListNode
{
	int m_nKey;
	ListNode* m_pNext;
};
//代码核心:
//函数的输入参数是链表的头节点指针。
//栈中存放的是元素指针
void PrintListReverse(ListNode* pHead){
	stack<ListNode*> st;   
	ListNode* p = pHead->m_pNext;
	while(p != NULL){
		st.push(p);
		p = p -> m_pNext;
	}
	while(!st.empty()){
		ListNode* temp = st.top();
		printf("%d\n",temp->m_nKey);
		st.pop();
	}
	return;
}
//测试代码,可以看看函数写的是否正确
int main(){
	ListNode* test,p;
	p = test;
	int num;
	scanf("%d",&num);
	for(int i = 0;i<num;i++){
		ListNode* temp = new ListNode;
		scanf("%d",&temp->m_nKey);
		temp->m_pNext = NULL;
		p->m_pNext = temp;
		p = p->m_pNext;
	}
	PrintListReverse(test);//函数调用
	return 0;
}

总结

代码里用到了c++中new关键字,可以在内存中开辟一块空间,比malloc要方便一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值