反转链表
反转链表
让我们从一个经典问题开始:
反转一个单链表。
一种解决方案是按原始顺序迭代结点
,并将它们逐个移动到列表的头部
。似乎很难理解。我们先用一个例子来说明我们的算法。
算法概述
让我们看一个例子:
请记住,黑色结点 23 是原始的头结点。
1. 首先,我们将黑色结点的下一个结点(即结点 6)移动到列表的头部:
2. 然后,我们将黑色结点的下一个结点(即结点 15)移动到列表的头部:
3. 黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新的头结点 15。
更多
在该算法中,每个结点只移动一次
。
因此,时间复杂度为 O(N)
,其中 N 是链表的长度。我们只使用常量级的额外空间,所以空间复杂度为 O(1)。
这个问题是你在面试中可能遇到的许多链表问题的基础。如果你仍然遇到困难,我们的下一篇文章将更多地讨论实现细节。
还有许多其他的解决方案。您应该熟悉至少一个解决方案并能够实现它。