leetcode算法203.移除链表元素

简介: 当给你一个链表的头节点 head 和一个整数 val时 ,如何删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 ?本文带大家解决这个问题。

一、leetcode算法



1、移除链表元素


1.1、题目


给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == 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

输出:[]


1.2、思路


思路一:此题我们使用迭代的方式解决,我们首先判断头结点下一个节点的值是否等于给定的值,如果等于,那么头结点指向下下个节点,也就是head.next = head.next.next;这样就把中间的节点去掉了。


同事头结点也有可以是指定的值,所有要用一个其他节点来指向头结点。


1.3、答案


2.png


class Solution {
    public ListNode removeElements(ListNode head, int val) {
      ListNode dHead = new ListNode(0);
      dHead.next = head;
      ListNode temp = dHead;
      while(temp.next != null){
          if(temp.next.val == val){
              temp.next = temp.next.next;
          }else{
              temp = temp.next;
          }
      }
      return dHead.next;
    }
}


复杂度分析


时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。


空间复杂度:O(1)。


相关文章
|
2月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
01_移除链表元素
01_移除链表元素
|
2月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
2月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
2月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
2月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
2月前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
14 0
|
2月前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
13 0
下一篇
无影云桌面