您现在的位置是:
首页
>
问题详情
如何实现一个高效的单向链表逆序输出?
面试宝典
2023-06-12
Web前端开发工程师
67
一种常用的方法是使用递归,先输出链表的所有节点,再倒序输出每个节点的值。具体实现如下:
```
void reversePrint(ListNode* head) {
if (head == NULL) {
return;
}
reversePrint(head->next);
cout << head->val << " ";
}
```
这种实现方法需要额外的系统栈空间,空间复杂度为O(N),其中N是链表长度。同时,由于递归调用的开销较大,时间复杂度也为O(N)。
另一种方法是使用栈,先将链表中的所有节点依次入栈,再依次弹栈输出。具体实现如下:
```
void reversePrint(ListNode* head) {
stack<ListNode*> st;
ListNode* p = head;
while (p != NULL) {
st.push(p);
p = p->next;
}
while (!st.empty()) {
cout << st.top()->val << " ";
st.pop();
}
}
```
这种实现方法需要额外的O(N)空间来存储栈。时间复杂度同样为O(N)。
```
void reversePrint(ListNode* head) {
if (head == NULL) {
return;
}
reversePrint(head->next);
cout << head->val << " ";
}
```
这种实现方法需要额外的系统栈空间,空间复杂度为O(N),其中N是链表长度。同时,由于递归调用的开销较大,时间复杂度也为O(N)。
另一种方法是使用栈,先将链表中的所有节点依次入栈,再依次弹栈输出。具体实现如下:
```
void reversePrint(ListNode* head) {
stack<ListNode*> st;
ListNode* p = head;
while (p != NULL) {
st.push(p);
p = p->next;
}
while (!st.empty()) {
cout << st.top()->val << " ";
st.pop();
}
}
```
这种实现方法需要额外的O(N)空间来存储栈。时间复杂度同样为O(N)。
-
上一篇
如何实现一个高效的单向链表逆序输出?
<p>一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段。</p><p><br></p><p>方法一、直接递归(简单,但O(n)空间复杂度不支持大数据量)</p><p>方法二、采用栈进行存储(O(n)时间复杂度,但不支持大数据量,栈中需要存储所有节点)</p><p>方法三、直接遍历(不需要额外存储空间,但O(n^2)时间复杂度)</p><p>方法四、翻转链表再遍历(O(n)时间复杂度且不需要额外存储空间,但需要改变原始链表结构)</p><p>方法五、头插法新建空链表(简单,但是O(n)空间复杂度)</p><p><br></p>
-
下一篇
如何实现一个高效的单向链表逆序输出?
如何实现一个高效的单向链表逆序输出?
相关文章
- 在PHP中,Magic Method都有哪些,并举例说明它们的作用?
- 请解释HTTP的基本概念,以及在Golang中如何使用HTTP?
- PHP7和PHP5的性能上有什么差别?
- PHP中如何处理文件上传和下载?
- 请提供至少三个通过PHP实现的网站性能优化技巧。
- 请解释一下PHP中的MVC模式是如何工作的?
- 如何在Golang中进行并发编程?
- 聊一下高并发和高性能的区别和联系?
- 如何在Golang中实现单例模式?
- PHP中如何进行单元测试以及如何在开发过程中保证代码质量?
- 请解释什么是defer语句,以及它有什么作用?
- 请给一个例子解释一下PHP中的闭包函数是什么?
- PHP中常用的设计模式有哪些?
- 请举例说明PHP中如何处理异常?
- 请解释下PHP中会话(session)和Cookie(cookie)的作用。
- 请描述在Golang中使用MongoDB时的最佳实践。
- 请问PHP中如何实现多线程?
- 如何通过PHP来保护您的代码免受SQL注入攻击?
- 请谈谈您对PHP的垃圾回收机制的了解及实践。
- 请列出与PHP相关的缓存机制及其优缺点。
微信收款码
支付宝收款码