给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
- //输入:head = [1,2,3,4,5]
- //输出:[5,4,3,2,1]
思路
首先,我们定义了两个指针 prev
和 curr
,初始时将它们都指向链表的头节点 head
。然后,我们使用一个循环,遍历整个链表。
在每一次循环中,我们先将 curr
的下一个节点保存在 nextNode
中,以便在反转后能够继续遍历链表。然后,我们将 curr
的 next
指针指向 prev
,这样就将 curr
的指针方向反转了。接着,我们将 prev
指向当前节点 curr
, curr
指向下一个节点 nextNode
,继续下一次循环。
通过不断地反转指针的指向,最终我们可以将整个链表反转过来。最后,我们返回反转后的链表的头节点 prev
。
这个算法的时间复杂度为 O(n),其中 n 是链表的长度,因为我们需要遍历整个链表一次来完成反转操作。
算法代码
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextNode = curr.next;
curr.next = prev;
prev = curr;
curr = nextNode;
}
return prev;
}
}