互联网面试宝典

您现在的位置是: 首页 >

问题详情

如何实现一个高效的单向链表逆序输出?

面试宝典 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)。