删除链表中等于给定值 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; }
* * }
* */
代码实现:
public class LinkedListTest{
static class ListNode{
int val;
ListNode next;
public ListNode(int val) {
this.val=val;
}
}
public ListNode removeElements(ListNode head,int val) {
//先删除中间节点再删除头节点
if(head==null){
//空链表,直接返回空
return null;
}
//先删除中间节点的情况
ListNode pre=head;//pre始终指向cur的前一个位置
ListNode cur=head.next;
while(cur!=null){
//到达末尾就不用继续删除了;
if(cur.val==val) {
//需要删除的情况
pre.next=cur.next;//删除要删除的节点cur
cur=pre.next;//cur指向下一个元素判断是否需要删除
}else {
//不用删除的情况
pre=cur;
cur=cur.next;
}
}
//删除头节点的情况(放到最后只需要处理一次)
if(head.val==val) {
head=head.next;
}
return head;
}
}