一.题目:
输入一个链表的头文件,从尾到头反过来打印出每个节点的值。链表节点定义如下:
struct ListNode {
int m_nValue;
struct ListNode *m_pNext;
};
二.分析:
可从两种思路来解决:
1.迭代 + 栈;
2.递归。
三.答案:
1.迭代 + 栈:
void printListReversingly_Iteratively(ListNode *pHead) {
stack<ListNode *> nodes;
ListNode *pNode = pHead;
while (pNode != NULL) {
nodes.push(pNode);
pNode = pNode->m_pNext;
}
while (!nodes.empty()) {
pNode = nodes.top();
printf("%d\n", pNode->m_nValue);
nodes.pop();
}
}
2.递归:
void printListReversingly_Recursively(ListNode *pHead) {
if (pHead == NULL) {
return;
}
printListReversingly_Recursively(pHead->m_pNext);
printf("%d\n", pHead->m_nValue);
}
四.相关题目:
1.面试题13:在O(1)时间删除链表结点;
2.面试题15:链表中的倒数第k个结点;
3.面试题16:反转链表;
4.面试题17:合并两个排序的链表;
5.面试题37:两个链表的第一个公共结点;
6.面试题45:圆圈中最后剩下的数字(考察环形链表);
7.面试题27:二叉搜索树与双向链表;
8.面试题26:复杂链表的复制。
本文介绍了一种链表逆序打印的方法,通过两种不同的实现方式——迭代加栈和递归,详细阐述了如何从尾到头打印链表的每一个节点。此外还提供了几个相关的链表操作面试题供读者进一步学习。
637

被折叠的 条评论
为什么被折叠?



