题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例 :
输入:1->2->3->4->5->NULL
输出:5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000
1 | /** |
方法一:双指针迭代
设置两个指针,不断修改当前节点的 next ,例如 cur.next = pre
1 | class Solution { |
复杂性分析:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
执行结果:通过
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.4 MB, 在所有 Java 提交中击败了73.62%的用户
方法二:递归
首先需要设置递归终止条件,开始递归,从最后的节点开始修改 next
1 | class Solution { |
复杂性分析:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
执行结果:通过
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.6 MB, 在所有 Java 提交中击败了44.56%的用户
方法三:栈
利用栈先进后出的特点,把节点推进栈,再一个个弹出来,需要注意的是,弹出来后的节点需要更改它们的next
1 | class Solution { |
复杂性分析:
- 时间复杂度:O(N)
- 空间复杂度:O(N)
执行结果:通过
执行用时:1 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:39.4 MB, 在所有 Java 提交中击败了83.03%的用户