反转链表
理解题目:
题目要求反转一个单链表。
代码实现:
public class ReverseLinkedList {
// 反转链表
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next; // 临时保存下一个节点
curr.next = prev; // 当前节点指向前一个节点
prev = curr; // 前一个节点指向当前节点
curr = nextTemp; // 当前节点移动到下一个节点
}
return prev; // 返回反转后的头节点
}
}
步骤解释:
-
初始化两个指针
prev
和curr
,分别指向 null 和链表头部。 -
在循环中,对当前节点
curr
进行反转操作: - 先临时保存当前节点的下一个节点
nextTemp
。 - 将当前节点的
next
指针指向prev
,完成反转。 - 将
prev
指针指向当前节点curr
,为下一次迭代做准备。 -
将当前节点
curr
移动到下一个节点nextTemp
。 -
当循环结束时,返回反转后的头节点
prev
。
时间复杂度: 遍历一次链表,时间复杂度为 O(n),其中 n 是链表的长度。
空间复杂度: 只使用了常数级别的额外空间,空间复杂度为 O(1)。