删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解析:
这个删除的节点的操作很容易,比如可以将下一个节点的值复制到本节点,随后将本节点的下一个节点指向下一个节点的下一个节点。
这里需要注意一下,将节点置为null,并不是这个节点变成null了,而是将这个指针(Java为引用)置为了null。
我为链表添加了一个头结点,然后利用头结点永远比head慢一步的特性。
CODE
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null) return head;
ListNode pre=head;
ListNode temp=new ListNode(0);
ListNode result=temp;
temp.next=head;
while(pre!=null)
{
if(pre.val==val)
{
if(pre.next!=null )
{
pre.val=pre.next.val;
pre.next=pre.next.next;
}
else
{//当链表的最后一个节点是将要删除的节点时,将头结点出来的指针指向null,同时将pre改为null,下一步就跳出来while循环。
temp.next=null;
pre=null;
}
}
else
{
temp=temp.next;
pre=pre.next;
}
}
return result.next;
}
}