using System;
using System.Collections.Generic;
class Solution {
public ListNode ReverseList(ListNode Head)
{
ListNode cur = Head;
ListNode next = null;
ListNode pre = null;
if(Head == null) return null;
while ( cur != null)
{
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
链表反转,即 将该结点的下一个结点变为上一个结点,
1.空链表不需要处理
2.初始化两个结点保存当前结点上一个/当前 结点
每到一个新结点就将其与下一个结点的链接 断开,将该结点的next指向pre
之后将临时的两个结点向后移动,pre = cur; cur = next;
直到当前结点为空,终止循环
复杂度分析
-
时间复杂度:O(n),其中 nnn 是链表的长度。需要遍历链表中的每个结点一次,每个结点的反转操作的时间都是 O(1)。
-
空间复杂度:O(1)。