14-代码随想录203移除链表元素

一、203.移除链表元素

力扣题目链接(opens new window)

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

示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]

示例 2: 输入:head = [], val = 1 输出:[]

示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]

二、链表法

class ListNode:#定义针(定义链表节点)--指向值和下一个位置
    def __init__(self,x):
        self.val=x
        self.next=None
class LinkList:
    def __init__(self):#定义头针--指向头位置
        self.head=None
    def initList(self,data):#把输入的列表或数组转换为链表
        self.head=ListNode(data[0])
        r=self.head
        p=self.head
        for i in data[1:]:#第1个位置到最后一个进行遍历
            node=ListNode(i)#给链表创建新节点,有val有next
            p.next=node#给新节点塞进列表
            p=p.next
        return r
    def printlist(self,head):#打印链表
        if head==None:return
        node=head
        while node!=None:
            print(node.val,end='')#在不换行的情况下打印节点(或元素)的值
            node=node.next
    def remove(self,head,target):
        node=head
        l=[]
        if node.val!=target:
            l.append(node.val)
            while node.next:
                if node.next.val == target:
                    node.next = node.next.next
                else:
                    node = node.next
                    l.append(node.val)
        else:
            while node.next:
                if node.next.val == target:
                    node.next = node.next.next
                else:
                    node = node.next
                    l.append(node.val)
        print(l)


if __name__=='__main__':
    l=LinkList()
    l1=input("head=").split()
    val=input("val=")
    if l1==[]:
        print("[]")
    else:
        nums = l.initList(l1)
        l.remove(nums, val)


三、结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

链表的设定真的好麻烦,但是用指针去的时候真的很方便,哎,鱼和熊掌不可兼得哇。
容易混淆的地方可能就是参数吧,小心这个。然后就是如果遇到目标值删除该值的时候不要急着打印node.val,要等待node.next的指针指向node.next.next之后再进入循环,如果打印你会发现被删除地方的前面值会被再次打印。

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淅淅同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值