leetcode203-Remove Linked List Elements移除链表元素

# 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

思路心得:

  1. 不用一上来就讨论要移除的元素是链表第一个节点的特殊情况,放到最后return的时候进行讨论即可,即一开始默认链表第一个节点不删除,否则还要多加一个外部引用(类似current);
  2. 默认链表第一个节点不删除,先将current设置为第一个节点
  3. 每次都判断current的下一个节点是不是要删除的节点。如果是,将current.next调整为current.next.next,即删除了该current.next节点,使用continue结束本次循环,开始下一次循环(即不执行current=current.next语句,因为策略是每次都要判断current的下一个节点是否要删除);如果current的下一个节点不是要删除的节点,那么将current后移一个,继续循环,直到到最后一个节点
  4. 如果head是要删除的节点,那么返回head.next即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值