当前位置:实例文章 » 其他实例» [文章]Leetcode-每日一题【2487.从链表中移除节点】

Leetcode-每日一题【2487.从链表中移除节点】

发布人:shili8 发布时间:2024-12-29 22:16 阅读次数:0

**LeetCode 每日一题2487. 从链表中移除节点**

### 题目描述给定一个单链表的头指针 `head` 和一个整数 `val`,请你删除链表中所有值为 `val` 的节点,并返回修改后的链表。

**示例1:**

输入:`head = [1,2,6,3,4,5,6], val =6`
输出:`[1,2,3,4,5]`

**示例2:**

输入:`head = [], val =1`
输出:`[]`

### 解决方案#### 方法一:使用迭代法我们可以使用一个指针 `cur` 来遍历链表,遇到值为 `val` 的节点时,将其删除。具体实现如下:

class Solution:
 def removeElements(self, head: ListNode, val: int) -> ListNode:
 # 创建一个哑结点作为头结点 dummy = ListNode(0)
 dummy.next = head cur = dummy while cur.next is not None:
 if cur.next.val == val:
 # 删除值为val的节点 cur.next = cur.next.next else:
 cur = cur.next return dummy.next


#### 方法二:使用递归法我们可以使用一个函数 `removeElements` 来递归地删除链表中所有值为 `val` 的节点。具体实现如下:

class Solution:
 def removeElements(self, head: ListNode, val: int) -> ListNode:
 # 如果头结点的值等于val,则返回None if head is None or head.val == val:
 return self.removeElements(head.next, val)
 # 如果头结点的值不等于val,则将其设为下一个结点的值 head.next = self.removeElements(head.next, val)
 return head


###代码注释* 在方法一中,我们创建了一个哑结点 `dummy` 作为头结点,这样我们就可以避免处理空链表的情况。
* 我们使用一个指针 `cur` 来遍历链表,遇到值为 `val` 的节点时,将其删除。
* 在方法二中,我们使用一个函数 `removeElements` 来递归地删除链表中所有值为 `val` 的节点。
* 如果头结点的值等于 `val`,我们返回 `None`,表示链表已经被完全删除。
* 如果头结点的值不等于 `val`,我们将其设为下一个结点的值,并递归地调用 `removeElements` 函数来删除后续的结点。

### 总结在本题中,我们需要从链表中移除所有值为 `val` 的节点。我们可以使用迭代法或递归法来实现这个功能。在方法一中,我们使用一个指针 `cur` 来遍历链表,遇到值为 `val` 的节点时,将其删除。在方法二中,我们使用一个函数 `removeElements` 来递归地删除链表中所有值为 `val` 的节点。我们可以根据具体需求选择合适的方法来实现这个功能。

其他信息

其他资源

Top