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