删除链表中的元素

题目描述:删除链表中等于给定值val的所有节点。

样例:给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。

最基本的删除操作,主要学习的是“摘链”的过程。

由链表的结构特性可知(详见:点击打开链接),单链表(简称链表,若无特别说明,链表都是单链表)是不能回溯的,就是说找不到这个节点的前一个节点,而所谓删除一个元素实际上是令这个节点的前一个元素直接指向这个节点的后一个元素(python特性是当一块内存无引用时,自动清空)。那么删除单链表节点就需要考虑到一种特殊情况,就是如果删除的是头结点呢?

为了方便操作,我们可以使用一种特殊的方法,那就是在头结点之前建立一个dummy节点,dummy的后一个节点是头结点,再做删除操作就方便多了。我个人将这种方法简称为dummy法。

代码很容易写出:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # @param head, a ListNode
    # @param val, an integer
    # @return a ListNode
    def removeElements(self, head, val):
        dummy = ListNode(-1)
        dummy.next = head
        cur = head
        pre = dummy
        while cur:
        	if cur.val == val:
        		pre.next = cur.next
        	else:
        		pre = pre.next
        	cur = cur.next
        return dummy.next
        # Write your code here
第12行新建dummy时,随意给dummy一个赋值即可(我个人习惯用-1)。pre指向当前节点的前驱,将cur指向的节点中的值与要删除的值比较,即知该不该将cur指向的节点删除。若还没找到要删除的节点,则同时将pre和cur后移即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值