应用题-链表专题-移除链表元素
关键点:
- 如何统一操作
- 删除节点必须知道前驱结点
```python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
if not head: return None
dummy = ListNode( next=head )
cur = dummy
while cur.next:
if cur.next.val == val:
cur.next = cur.next.next
else:
cur = cur.next
return dummy.next
```
单链表递归的一般模式:
```python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
# 递归: 实际上就是还原一个从尾部开始重新构建链表的过程
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
if not head: return None
# removeElements的含义: 返回完整的已经去掉val节点的子链表
# !important: 链接 在当前递归层用当前节点接住后面的子链表
head.next = self.removeElements( head.next, val )
if head.val == val: return head.next
return head
```