问题描述:删除链表中等于给定值 val 的所有节点。
链接:https://leetcode-cn.com/problems/remove-linked-list-elements)
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
求解思路:
先删除中间的普通节点,再判断待删除节点是否是头节点。
- 创建两个节点,一个指向要删除的元素,一个指向要删除元素的前一个元素。
- 先处理中间元素,后处理头元素等于val的情况。防止1,2个元素均为要删除元素,而跳过删除第二个元素。
- 循环比较是否等于val,等于则删除,不等于则prev和toDelet均向后移动。
- 单独处理待删除节点是头节点的情况。
public class Solution {
public ListNode removeElements(ListNode head, int val) {
//1.判断特殊情况
if(head == null){
return null;
}
//2.寻找待删除节点的前一个节点prev
ListNode prev = head;
ListNode toDelet = head.next;
while(toDelet != null){
if(toDelet.val == val){
//3.删除当前值为val的节点cur
prev.next = toDelet.next;
toDelet = prev.next;
}else{
//没有找到值为val的节点,更新prev和toDelet的位置
prev = prev.next;
toDelet = toDelet.next;
}
}
//4.单独处理待删除节点是头节点的情况
if(head.val == val) {
head = head.next;
}
return head;
}
}
执行结果: