203. 移除链表元素

发布于:2024-05-18 ⋅ 阅读:(134) ⋅ 点赞:(0)

203. 移除链表元素

这个Python类Solution中的方法removeElements用于从链表中删除所有值为val的节点。该方法通过使用一个哑节点(dummy node)简化了链表的操作。以下是代码的注释解读:

class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        # 创建一个哑节点(dummy node),其值为-1,next指向head
        dummyHead = ListNode(-1)
        dummyHead.next = head
        
        # 使用node指针遍历链表,从哑节点开始
        node = dummyHead
        
        # 遍历链表,直到node.next为空
        while node.next is not None:
            # 如果下一个节点的值为val,则删除该节点
            if node.next.val == val:
                node.next = node.next.next
            else:
                # 否则,继续遍历
                node = node.next
        
        # 返回新的链表头,跳过哑节点
        return dummyHead.next

代码工作流程

  1. 创建哑节点(dummy node)

    dummyHead = ListNode(-1)
    dummyHead.next = head
    

    哑节点的值设为-1(或任意值),next指向链表的头节点head。使用哑节点可以简化链表的删除操作,特别是当要删除头节点时。

  2. 初始化指针

    node = dummyHead
    

    初始化指针node,指向哑节点dummyHead。这个指针用于遍历链表。

  3. 遍历链表

    while node.next is not None:
    

    使用while循环遍历链表,直到node.next为空(即到达链表末尾)。

  4. 检查并删除节点

    if node.next.val == val:
        node.next = node.next.next
    else:
        node = node.next
    
    • 如果node.next的值等于val,则删除该节点。通过将node.next指向node.next.next实现删除。
    • 否则,将指针node移动到下一个节点。
  5. 返回新的链表头

    return dummyHead.next
    

    返回新的链表头,跳过哑节点dummyHead

示例

假设链表为 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6,要删除值为6的节点。

  1. 初始化:

    • dummyHead: -1 -> 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6
    • node: 指向 dummyHead
  2. 遍历链表:

    • 检查 1:不等于 6,移动到下一个节点。
    • 检查 2:不等于 6,移动到下一个节点。
    • 检查 6:等于 6,删除节点,链表变为 1 -> 2 -> 3 -> 4 -> 5 -> 6
    • 检查 3:不等于 6,移动到下一个节点。
    • 检查 4:不等于 6,移动到下一个节点。
    • 检查 5:不等于 6,移动到下一个节点。
    • 检查 6:等于 6,删除节点,链表变为 1 -> 2 -> 3 -> 4 -> 5
  3. 返回新的链表头:1 -> 2 -> 3 -> 4 -> 5