从尾到头打印链表?两种方法带源码,轻松搞定!

B站影视 韩国电影 2025-08-06 06:37 1

摘要:在数据结构和算法中,链表是非常基础的结构,而“从尾到头打印链表”也是高频出现的问题。比如给定链表 1→2→3→4,要输出 [4,3,2,1],且最好不修改原链表结构。今天分享两种简单高效的解法,附带完整源码,新手也能看懂。

在数据结构和算法中,链表是非常基础的结构,而“从尾到头打印链表”也是高频出现的问题。比如给定链表 1→2→3→4,要输出 [4,3,2,1],且最好不修改原链表结构。今天分享两种简单高效的解法,附带完整源码,新手也能看懂。

栈的核心特性是“后进先出”,正好契合“从尾到头”的需求——先把链表元素按顺序“压”进栈,再依次“弹”出来,自然就是反转的顺序。

遍历链表,将每个节点的值依次压入栈中(先遍历的节点值在栈底,后遍历的在栈顶);遍历结束后,从栈顶依次弹出元素,存入结果列表,即得到反转序列。// 定义链表节点结构struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};class Solution {public:vector printListFromTailToHead(ListNode* head) {stack stk; // 定义一个栈vector res; // 存储结果的向量// 遍历链表,将节点值入栈ListNode* pNode = head;while (pNode != NULL) {stk.push(pNode->val);pNode = pNode->next;}// 从栈中弹出元素,存入结果向量while (!stk.empty) {res.push_back(stk.top);stk.pop;}return res;}};

如果用 Python,可直接利用列表的 insert 方法,在遍历链表时将每个节点值插入到列表头部,相当于实时构建反转序列。

# 定义链表节点类class ListNode:def __init__(self, x):self.val = xself.next = Noneclass Solution:def printListFromTailToHead(self, listNode):result = p = listNode# 遍历链表,每次在列表头部插入节点值while p:result.insert(0, p.val) # 插入到头部,实现反转p = p.nextreturn result代码简洁,一行核心逻辑搞定;无需额外数据结构(栈),直接用列表特性实现;时间复杂度 O(n²)(insert(0, ...) 操作每次需移动元素),适合链表较短的场景。栈的解法通用性强(适合所有编程语言),效率稳定,推荐在面试或正式场景中使用;Python 列表插入法更简洁,适合快速编码或处理短链表。

核心思路都是利用“反转顺序”的特性,避开直接修改原链表的麻烦。下次遇到这个问题,不妨根据场景选择合适的方法,源码直接套用即可!

来源:码农世界

相关推荐