题目如下所示:
这个题目也就是你一遇到一个node符合要求,你就可以将其删除。是一个比较简单的基础题目,用于熟悉链表当中的最基本操作。我们可以使用如下的方法,也就是暴力法,遍历整个linked list,然后将所有的nodes保存到一个list里面,对不符合要求的values进行排除,然后再重新建立一个新的linked list,将符合要求的values放置进去。但是这样的话,虽然时间复杂度为o(n),但是空间复杂度却有点大,我们先来看看这个方法的代码实现:
# 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:
ls=[]
while head:
ls.append(head)
head=head.next
new_ls=[]
for i in ls:
if i.val==val:
pass
else:
new_ls.append(i.val)
ret=ListNode(0)
cur=ret
for i in new_ls:
ret.next=ListNode(i)
ret=ret.next
return cur.next
方法二:
使用dummy vaiable
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
dummy = ListNode()
dummy.next = head
p = dummy
while p is not None:
# 向前探一个节点检查是否等于val
if p.next and p.next.val == val:
# 跳过 p.next 节点
p.next = p.next.next
else:
p = p.next
return dummy.next
同样的方法,不同的变量:
# 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:
cur=ListNode(0)
cur.next=head
node=cur
while cur:
if cur.next and cur.next.val==val:
cur.next=cur.next.next
else:
cur=cur.next
return node.next
我们使用这个方法,所需要用到的判断永远是使用cur.next进行判断,有可能漏掉第一个node,因此我们需要设定一个cur在head的前面。对head的第一个node进行判断