🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 问题 摘取leetcode https://leetcode-cn.com/problems/remove-linked-list-elements/description/ 删除链表中等于给定值 val 的所有元素。 示例 给定: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6 返回: 1 --> 2 --> 3 --> 4 --> 5 ~~~ /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements(ListNode head, int val) { } } ~~~ # 代码 先把leetcode提供的类拿出来 ~~~ public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } ~~~ ## 不用虚拟节点 ~~~ public class Solution { public ListNode removeElements(ListNode head, int val) { //如果删除的元素正好是头元素,但是这个头元素不能是空,空怎么能删除 //这个头节点,还有可能是一个出现的新的头节点 while (head != null && head.val == val) { ListNode delNode = head; head = head.next; delNode.next = null; } //如果这个链表正好被全部删除了,就返回null if (head == null) { return null; } //设置个前面的节点,从head开始,这个head肯定不是要删除的 ListNode prev = head; //判断删除的节点是不是null while (prev.next != null) { //如果下个节点就是要删除的节点 if (prev.next.val == val) { //取出这个要删除的节点 ListNode delNode = prev.next; //把删除节点的上一个节点的他的下个指向 //指向到下个节点 prev.next = delNode.next; //置为null,被gc delNode.next = null; } else { //到后面查找下 prev = prev.next; } } return head; } } ~~~