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