第6题:203. 移除链表元素

102 阅读1分钟

第6题:203. 移除链表元素

题目

leetcode.cn/problems/re…

图片.png

思路

  1. 非头节点:找到节点的前一个节点,指向节点的下一个节点
  2. 头节点:移到头节点的下一个节点,作为新的头节点,可以增加一个虚拟头节点,则处理思路和非头节点一致。

使用虚拟头节点的方法过程:

  1. 可以用统一的规则删除
  2. 用while,是持续移除的过程
  3. 定义一个dummy head 的下一个节点是原来的头节点
  4. 定义cur用来遍历,cur=dummy head ,删除的是cur next value =target的
  5. 遍历结束,返回的是虚拟头节点的下一个,才是新链表的头节点
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        # 定义虚拟头节点
        dummy_head = ListNode(next=head)
        cur  = dummy_head
        while(cur.next!=None):
            if(cur.next.val == val):
                # 删除
                cur.next = cur.next.next 
            else:
                cur = cur.next
        return dummy_head.next