删除链表中等于给定值 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; } }