算法编程(十七):移除链表元素

简介: 算法编程(十七):移除链表元素

写在前面


今天的这道题,是我们很熟悉的链表结构。

《移除链表元素》一题,主要就是针对链表来进行一些操作的题目。

对熟悉链表或者不太熟悉的链表的同学们有一定的帮助。

下面我们就一起来看一下吧。

image.png

题目解读


移除链表元素,从题目的描述来看,是要将链表中所有符合要求的值的链表对象删除。

并且不能打乱原有的链表顺序。

从示例中,我们可以看得出,最后的结果是要将某个链表对象移除后,然后将后续的链表再次拼接上。

那么如何实现呢。

其实操作链表无非就是使用循环遍历、或者递归的方式来处理。

如果是递归的话,代码的编写会简单一些。

如果是循环遍历的话,可能会涉及到中间值的问题。

大家可以自行选择一下,我这里也实现了一波,具体代码在下面。

代码实现


本次运行代码如下:

采用了循环遍历的方式来处理。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode node = new ListNode(0);
        node.next = head;
        ListNode z = node;
        while (z.next != null) {
            if (z.next.val == val) {
                z.next = z.next.next;
            } else {
                z = z.next;
            }
        }
        return node.next;
    }
}

代码执行结果


今天的执行结果还是比较可以的,普遍的循环遍历比较快。

没有试递归的性能如何,大家可以自行试一下。

image.png

其他思路


除了这种循环遍历的方式,自然就是递归了。

通过递归也可以实现该功能。

总结


链表数据结构的操作,一般就是循环遍历、递归来操作,只要出现移除、添加节点的操作,还需要一个中间值来一并处理。


相关文章
|
9天前
|
存储 算法 C语言
【数据结构与算法 刷题系列】合并两个有序链表
【数据结构与算法 刷题系列】合并两个有序链表
|
10天前
|
机器学习/深度学习 算法 C语言
【C/数据结构与算法】:10道链表经典OJ
【C/数据结构与算法】:10道链表经典OJ
9 1
|
8天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
8天前
|
算法 Java
Java数据结构与算法:循环链表
Java数据结构与算法:循环链表
|
9天前
|
算法
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)
|
9天前
|
算法
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
【数据结构与算法 刷题系列】判断链表是否有环(图文详解)
|
9天前
|
算法
【数据结构与算法 经典例题】随机链表的复制(图文详解)
【数据结构与算法 经典例题】随机链表的复制(图文详解)
|
9天前
|
算法 C语言
【数据结构与算法 经典例题】链表的回文结构(图文详解)
【数据结构与算法 经典例题】链表的回文结构(图文详解)
|
9天前
|
算法
【数据结构与算法 经典例题】反转链表(图文详解)
【数据结构与算法 经典例题】反转链表(图文详解)
|
9天前
|
算法 C语言
【数据结构与算法 经典例题】相交链表求交点
【数据结构与算法 经典例题】相交链表求交点