题目链接
https://leetcode.cn/problems/remove-linked-list-elements/
题目描述
题意:删除链表中等于给定值 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
输出:[]
思路
写在注释里了
代码
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_head=ListNode(next=head) #添加一个虚拟头结点 使得可以直接删除实际的头结点
cur_Node=dummy_head #这个虚拟头结点作为当前节点
while cur_Node.next!=None:
if cur_Node.next.val==val: #如果当前节点的下一个节点的数值==val
cur_Node.next=cur_Node.next.next #删除当前节点的下一个节点,直接让cur_Node.next=cur_Node.next.next即可
else:
cur_Node=cur_Node.next #如果下一个节点的数值!=val,则将下一个节点视为当前节点,更新指针
return dummy_head.next #dummy_head是包含了虚拟头结点的链表,这里返回dummy_head.next就是不包含虚拟头节点的链表头结点
a=ListNode(1)
b=ListNode(2)
c=ListNode(1)
d=ListNode(3)
a.next=b
c.next=d
b.next=c
solu=Solution()
a=solu.removeElements(a,1)
def print_linklist(lk): #lk是head
while lk!=None:
print(lk.val, end=',')
lk = lk.next
print_linklist(a)