首页 > 其他分享 >203. 移除链表元素

203. 移除链表元素

时间:2023-09-04 21:31:42浏览次数:43  
标签:203 ListNode cur val self head next 链表 移除

前些日子在翻译论文,检查语法润色啥的。然后跟导师一起修改,前几天终于投了出去,现在可以回到正常的节奏上来了。

先看看题吧

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。

示例 1:

203. 移除链表元素_链表

输入: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
输出:[]
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        while head and head.val==val:
            head = head.next
        pre = head
        cur = head
        while cur:
            if cur.val==val:
                pre.next=cur.next
                cur=cur.next
            else:
                pre=cur
                cur=cur.next
        return head

上述用了双指针,cur指向当前的节点,pre指向当前节点的前一个节点。然后遍历整个链表,通过pre.next=cur.next删除节点。

当然还可以用递归

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        if not head:
            return None
        head.next = self.removeElements(head.next,val)
        if head.val==val:
            return head.next
        else:
            return head 

标签:203,ListNode,cur,val,self,head,next,链表,移除
From: https://blog.51cto.com/u_16123878/7362888

相关文章

  • 【 LeetCode题解 】203. 移除链表元素
    【LeetCode题解】203.移除链表元素题目链接:https://leetcode.cn/problems/remove-linked-list-elements/博客主页链接:DuckBro博客主页关注博主,后期持续更新系列文章***感谢观看,希望对你有所帮助***目录【LeetCode题解】203.移除链表元素......
  • 侵入式链表学习
    在408和常见教材里面,以普通的尾指针点单链表为例,一个链表节点包含数据部分和尾指针。首个节点称为头节点,不包含数据,它的尾指针指向下一个节点(首个节点设计成存数据的也行)。每个节点依次连接,直到最后一个节点,尾指针设为null,表示链表结束。如果设计一个节点内有首尾两个指针,那就可......
  • 剑指 Offer 06. 从尾到头打印链表
    剑指Offer06.从尾到头打印链表方法一顺序添加,再翻转。classSolution{publicint[]reversePrint(ListNodehead){ListNodeh=head;List<Integer>res=newArrayList<>();while(h!=null){res.add(h.val);h=......
  • 链表
    链表当需要插入或删除数据结构中某些元素时,用链表比数组方便得多,访问某一元素时则链表就是个dd。(链表可以用来秀指针操作注意:链表中的每个元素在使用前都要申请一个空间(new)并指向NULL(->next=NULL),即初始化操作由于链表不能访问某一元素,所以每次操作前都要从头开始(p=h......
  • 单链表题目*4
    //获取单链表有效结点个数publicstaticintgetLength(ListNodehead){if(head.next==null){return0;}intresult=0;ListNodetemp=head.next;while(temp!=null){result++;temp=temp.next;}returnresult;}//......
  • 链表实现插入排序
    将一串整型范围内的数按升序输出。数据输入样式16-53-3-54744818-245463663-9919-99990789用链表实现实例:1)结构体定义1structListNode2{3intdata;4ListNode*next;//结构体指针5ListNode*pre;//结构体指针6};2)建一个初始......
  • 单链表相关
    单链表创建总结*创建ListNode结点类有属性valnext考虑现实使用val定义为一个no和若干val,toString()重写*创建SingleLinkedList单链表类有private属性头指针head需要初始化*单链表类需要有的方法:*遍历方法:不为空、则从头指针.next首元结点开始遍历,直至尾部*插入结......
  • 数据结构与算法——有头无头循环链表详解
    ......
  • stm32在oled上实现多级菜单(基于链表)
    为了提高OLED显示多级菜单的易用性,手搓了基于链表的多级菜单的代码。主要有如下特点:1:需要配置地方少,后续新加菜单只需在初始化的时候添加,以及自己实现按键事件的回调函数即可。2:事件驱动,按键事件通过队列接收。因此,整个过程中,重写按键程序,消息队列,以及多级菜单框架。复习下双......
  • 链表详解
    C++中的链表是一种数据结构,用于存储一系列元素,每个元素都包含一个值以及一个指向下一个元素的指针。链表可以分为单向链表和双向链表,其中单向链表每个节点只有一个指向下一个节点的指针,而双向链表每个节点有一个指向下一个节点和一个指向前一个节点的指针。以下是关于C++链表的详......