删除列表的倒数第n个结点并返回列表
时间: 2023-09-20 21:11:15 浏览: 72
下面是一种可能的实现方式:
```
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def removeNthFromEnd(head: ListNode, n: int) -> ListNode:
# 创建虚拟头结点
dummy = ListNode(0)
dummy.next = head
# 计算链表长度
length = 0
curr = head
while curr:
length += 1
curr = curr.next
# 找到要删除的结点的前一个结点
curr = dummy
for i in range(length - n):
curr = curr.next
# 删除结点
curr.next = curr.next.next
# 返回头结点
return dummy.next
```
该函数接收一个链表头结点 `head` 和一个正整数 `n`,表示要删除倒数第 `n` 个结点。首先创建一个虚拟头结点 `dummy`,将其指向原链表的头结点。然后遍历一遍链表,计算出链表的长度 `length`。接下来再次遍历链表,找到要删除的结点的前一个结点。最后将该结点的 `next` 指针指向下下个结点即可。
注意,这里的删除操作是指将要删除结点的前一个结点的 `next` 指针指向下下个结点,而不是直接删除要删除的结点。这是因为单向链表无法直接找到要删除结点的前一个结点,需要从头结点开始遍历,时间复杂度为 $O(n)$,不如直接遍历一遍链表计算出要删除的结点的位置,时间复杂度也为 $O(n)$。
阅读全文