《代码随想录》学习笔记,原链接:代码随想录
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
dummy = ListNode(None, head) # 构建虚拟头节点,解决删除head后没有头节点的情况
slow, fast = dummy, dummy # 构建双指针
for i in range(n + 1): # 先让fast向后移动n + 1个节点(由于i从0开始,所以是n + 1个节点)
fast = fast.next
while fast is not None: # 让fast移动到链表末尾的None处,此时slow的位置就是倒数第n个结点的前一个结点
slow, fast = slow.next, fast.next
slow.next = slow.next.next # 删除倒数第n个结点
return dummy.next # 返回删除之后的新的head
【注】
- 为了防止删除的是head结点,而导致删除后的结果没有head结点,所以需要构建一个dummy
- for i in range(n + 1),先让fast向后移动n+1的结点(由于i从0开始,所以是n + 1个结点),那么当fast移动到链表末尾的None处,此时slow的位置就是倒数第n个结点的前一个结点