ListNode removeElements
时间: 2024-10-09 14:07:36 浏览: 24
ListNode是一个常见的链表数据结构,其中`removeElements`通常是用于删除链表中所有特定值的操作。这个函数通常接受两个参数:一个指向链表头的指针`head`和需要移除的目标值`val`。
在伪代码或具体的语言实现中,它可能会像这样:
```python
def removeElements(head, val):
dummy = ListNode(0) # 创建一个虚拟节点作为头结点
dummy.next = head
prev = dummy
curr = head
while curr is not None:
if curr.val == val:
prev.next = curr.next
else:
prev = curr
curr = curr.next
return dummy.next # 返回新链表的头节点,虚拟节点已被忽略
```
这个函数通过遍历链表,每当遇到目标值就跳过该节点,同时更新前驱节点使其指向下一个有效节点。当遍历完成后,返回的新链表就没有包含目标值的节点了。
相关问题
def removeElements(self, head: ListNode, val: int) -> ListNode:
# If head is None or the val is not in head, return head
if not head:
return head
if head.val == val:
head = head.next
return self.removeElements(head, val)
# Traverse through the list
prev = None
curr = head
while curr:
if curr.val == val:
if prev:
prev.next = curr.next
else:
head = curr.next
curr = curr.next
else:
prev = curr
curr = curr.next
return head
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
`removeElements` 函数用于从给定的链表(`head`)中删除所有值等于 `val` 的元素,返回新链表的头节点。这个函数采用迭代方式实现:
1. 创建一个虚拟头节点 `dummy`,并将其 `next` 指向原始链表的头 `head`。
2. 使用一个指针 `cur` 初始化为 `dummy`,然后开始遍历链表。
3. 在每次循环中,检查当前节点 `cur.next` 的值是否等于 `val`。如果相等,则跳过该节点,通过设置 `cur.next` 为 `cur.next.next` 来移除它。
4. 如果不等于 `val`,则简单地移动 `cur` 到下一个节点。
5. 循环结束后,`dummy.next` 就指向了新的链表头,所以返回 `dummy.next`。
代码示例如下[^1]:
```python
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy = ListNode() # 创建虚拟头节点
dummy.next = head # 将 dummy 的 next 指向原头
cur = dummy # 定义当前节点
while cur and cur.next: # 当还有节点时继续
if cur.next.val == val: # 找到要删除的节点
cur.next = cur.next.next # 跳过它
else:
cur = cur.next # 否则,移动到下一个节点
return dummy.next # 返回新链表的头节点
```
阅读全文