一、题目
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
二、分析
链表的操作——虚拟头节点:先创建头节点的类,再指向原链表的头节点,用current指针指向虚拟头节点,在后续操作中均用current指针实现。
这是一个需要不断遍历到链表末尾的操作,用while循环,先考虑循环的截止条件,current的指向不为空,即一直指到尾节点。(因为链表的尾节点指向None)
while循环中需要进行分支操作:每一个节点值是否等于val,如果等于,则跳过当前节点;如果不等于,就指向下一个节点。
注意两个小细节,判断的时候用current.next的值进行判断,便于操作。
返回新的链表头节点——虚拟头节点的next
三、代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
#创建虚拟头节点
dummy=ListNode(0)#dummy属于链表大类
dummy.next=head#虚拟头节点指向原链表的头节点
current=dummy#创建current指针指向虚拟头节点
#进入遍历查找(循环),用while循环就要首先设置截止条件
while current.next!= None :
if current.next.val==val:
current.next=current.next.next
else:
current=current.next
return dummy.next