题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
实现
要删除一个节点,需要将它前一个节点的指针指向当前的后一个节点,再将当前节点的next指针置为空,就实现了这个节点的删除。
创建虚拟头节点为了解决要删除的是head节点的问题。
# 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: ListNode, val: int) -> ListNode:
dummy = ListNode() # 创建虚拟头节点
dummy.next = head
pre, cur = dummy, head
while cur:
if cur.val == val:
pre.next = cur.next
else:
pre = pre.next
cur = cur.next
return dummy.next
# 上面的代码对删除的节点没有处理
def removeElements(self, head: ListNode, val: int) -> ListNode:
dummy = ListNode()
dummy.next = head
pre, cur = dummy, head
while cur:
if cur.val == val:
tmp = cur.next
pre.next = cur.next
cur.next = None # 将删除节点的指针指向空
cur = tmp
else:
pre = pre.next
cur = cur.next
return dummy.next
链接:https://leetcode-cn.com/problems/remove-linked-list-elements/