# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
if head == None:
return None
current=head
while current.next != None:
if current.next.val==val:
current.next=current.next.next
continue
current=current.next
if head.val==val: #将要移除的元素是链表head的情况放在此讨论
return head.next
else:
return head
思路心得:
- 不用一上来就讨论要移除的元素是链表第一个节点的特殊情况,放到最后return的时候进行讨论即可,即一开始默认链表第一个节点不删除,否则还要多加一个外部引用(类似current);
- 默认链表第一个节点不删除,先将current设置为第一个节点
- 每次都判断current的下一个节点是不是要删除的节点。如果是,将current.next调整为current.next.next,即删除了该current.next节点,使用continue结束本次循环,开始下一次循环(即不执行current=current.next语句,因为策略是每次都要判断current的下一个节点是否要删除);如果current的下一个节点不是要删除的节点,那么将current后移一个,继续循环,直到到最后一个节点
- 如果head是要删除的节点,那么返回head.next即可。