day03 代码随想录算法训练营 203. 移除链表元素
题目:
203. 移除链表元素
我的感悟:
- 题目里的节点是已经给好的,
- 创建虚拟节点,是为了方便处理头节点。
- 加油,我可以的!!!!!
理解难点:
代码难点:
- p是临时变量,类似于for i in range(10) 这里的i,本身是用完就扔的。
- 返回值为什么不能是p.next? 因为p是一个指针,不是链表里的节点。我们返回的是一个新的链表。
- p = p.next是为了下次循环
总结概括:
- 轻轻松松!
- 继续加油!
- chatGPT 网页版就挺好用的。善用工具
代码示例:
# 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]:
# 创建一个节点 虚拟头节点
dummy = ListNode()
# 把这个节点里面的下一个next = 连接到题目给的head
dummy.next = head
# =======================================================
# 创建一个临时指针p来指向dummy,用于遍历
p = dummy
# 遍历这个p
while p.next: # 只要有值
if p.next.val == val: # 如果找到了题目要求删除的val值
p.next = p.next.next # 重新指向新的节点
else:
p = p.next # 这一步没理解 , ### 解答:这一步是为了下轮循环
# =======================================================
return dummy.next # 这里为什么不能写p.next ### 解答: 因为p.next有可能是None
通过截图:
资料: