①先遍历,找到之后直接删除就可。
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
if head.val == val:
return head.next
pre = head
back = head.next
while back:
if back.val != val:
pre = back
back = back.next
else:
pre.next = back.next
break
return head
#执行用时:44 ms, 在所有 Python3 提交中击败了40.33%的用户
#内存消耗:15.6 MB, 在所有 Python3 提交中击败了23.17%的用户
②上面使用的指针数量太多,做一个优化。使用单指针就可以做到了:
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
if head.val == val:
return head.next
pre = head
while pre.next and pre.next.val != val:
pre = pre.next
if pre.next:
pre.next = pre.next.next
return head
# 执行用时:36 ms, 在所有 Python3 提交中击败了79.75%的用户
# 内存消耗:15.3 MB, 在所有 Python3 提交中击败了73.03%的用户
-------------看完题解,不得不佩服这些大佬们。。。我的内心:这tm也能用递归= =、真实感觉到自己和别人的差距:
③使用递归法----如果不等于val,直接返回,等于val,返回下一个结点。
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
if not head:
return null
if head.val == val:
return head.next
else:
head.next = self.deleteNode(head.next, val)
return head