【题目】
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
【示例 1】
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
【示例 2】
输入:head = [], val = 1
输出:[]
【示例 3】
输入:head = [7,7,7,7], val = 7
输出:[]
【提示】
列表中的节点在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= k <= 50
【代码】
【Python】
# 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:
jilu=[]
t=head
while t:
if t.val != val:
jilu.append(t.val)
t=t.next
pre,t=head,head
if not jilu:
return None
for x in jilu:
t.val=x
pre=t
t=t.next
if pre.next:
pre.next=None
return head
【方法2】
# 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:
if not head:
return head
cur,rs,rear=head,None,None
while cur:
if cur.val!=val:
if not rs:
rs=cur
rear=rs
else:
rear.next=cur
rear=cur
cur=cur.next
if rear:
rear.next=None
return rs
【方法3】
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
while head and head.val==val:
head=head.next
if not head:
return head
pre,cur=head,head.next
while cur:
if cur.val==val:
pre.next=cur.next
else:
pre=cur
cur=cur.next
return head