持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
写在前面
今天的这道题,是我们很熟悉的链表结构。
《移除链表元素》一题,主要就是针对链表来进行一些操作的题目。
对熟悉链表或者不太熟悉的链表的同学们有一定的帮助。
下面我们就一起来看一下吧。
题目解读
移除链表元素,从题目的描述来看,是要将链表中所有符合要求的值的链表对象删除。
并且不能打乱原有的链表顺序。
从示例中,我们可以看得出,最后的结果是要将某个链表对象移除后,然后将后续的链表再次拼接上。
那么如何实现呢。
其实操作链表无非就是使用循环遍历、或者递归的方式来处理。
如果是递归的话,代码的编写会简单一些。
如果是循环遍历的话,可能会涉及到中间值的问题。
大家可以自行选择一下,我这里也实现了一波,具体代码在下面。
代码实现
本次运行代码如下:
采用了循环遍历的方式来处理。
/**
* 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;
}
}
代码执行结果
今天的执行结果还是比较可以的,普遍的循环遍历比较快。
没有试递归的性能如何,大家可以自行试一下。
其他思路
除了这种循环遍历的方式,自然就是递归了。
通过递归也可以实现该功能。
总结
链表数据结构的操作,一般就是循环遍历、递归来操作,只要出现移除、添加节点的操作,还需要一个中间值来一并处理。