给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
输入:head = [], val = 1 输出:[]
# 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:
"""
第一种方法:删除头结点与非头结点分别处理
"""
#删除头节点(这里and前后语句不能相反,因为会先判断and前面的,
#若前面的不满足,后面语句不执行,不然有可能head == None,head.val == val报错)
while head != None and head.val == val:
head = head.next
#删除的不是头节点
#定义一个指针来删除
loc = head
while loc != None and loc.next != None:
if loc.next.val == val:
#删除下一个节点(loc和head指向同一个地址,只要对loc操作就行)
loc.next = loc.next.next
else:
#这里修改的是loc,所以不会影响到head
#前面修改的是loc.next相当于修改的是head.next
loc = loc.next
return head
"""
第二种方法:删除头结点与非头结点一样处理
"""
#给head加上个头节点
my_head = ListNode(next = head)
loc = my_head
while loc != None and loc.next != None:
if loc.next.val == val:
loc.next = loc.next.next
else:
loc = loc.next
return my_head.next