19. Remove Nth Node From End of List
分析
-
创建虚拟头节点
- 为了方便处理边界情况(如删除头节点),创建一个虚拟头节点
dummy
,其next
指向链表头部
- 为了方便处理边界情况(如删除头节点),创建一个虚拟头节点
-
计算链表长度
- 遍历链表,用变量
len
记录链表的总长度
- 遍历链表,用变量
-
定位目标节点的前驱节点
- 倒数第
n
个节点的前驱节点是正数第len - n
个节点 - 从虚拟头节点开始,移动
len - n
步到目标位置
- 倒数第
-
删除目标节点
- 通过修改前驱节点的
next
指针,跳过目标节点
- 通过修改前驱节点的
时间复杂度
需要遍历链表两次,计算链表长度和定位目标节点位置,时间复杂度 O(L)
, L
是链表长度
空间复杂度
空间复杂度 O(1)
C++代码
|
|