反转链表

反转链表

让我们从一个经典问题开始:

反转一个单链表。

一种解决方案是按原始顺序迭代结点,并将它们逐个移动到列表的头部。似乎很难理解。我们先用一个例子来说明我们的算法。

 

算法概述


让我们看一个例子:

请记住,黑色结点 23 是原始的头结点。

1. 首先,我们将黑色结点的下一个结点(即结点 6)移动到列表的头部:

2. 然后,我们将黑色结点的下一个结点(即结点 15)移动到列表的头部:

3. 黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新的头结点 15。

 

更多


在该算法中,每个结点只移动一次

因此,时间复杂度为 O(N),其中 N 是链表的长度。我们只使用常量级的额外空间,所以空间复杂度为 O(1)。

这个问题是你在面试中可能遇到的许多链表问题的基础。如果你仍然遇到困难,我们的下一篇文章将更多地讨论实现细节。

还有许多其他的解决方案。您应该熟悉至少一个解决方案并能够实现它。

posted @ 2019-11-17 15:30  任仁人  阅读(17)  评论(0编辑  收藏  举报