赞
踩
写法1、头节点 和 后面的节点 删除规则不一致
class Solution { public ListNode removeElements(ListNode head, int val) { //如果不建虚拟头节点,那删头节点和删后面的节点,逻辑是不一样的 //头节点可能连续多个命中val,所以有while,不是if while(head!=null && head.val == val){ head=head.next; } ListNode cur = head; //上面head可能全部删完了,所以要判断,cur不为null,我们下面需要取cur.next的val,所以还要判断cur.next不为null, while(cur!=null&&cur.next!=null){ if(cur.next.val == val){ //相等就跳过中间的一个节点 cur.next = cur.next.next; }else{ //不相等就往后走 cur = cur.next; } } return head; } }
写法2、新建虚拟指针法:使得删除规则可以一致
class Solution { public ListNode removeElements(ListNode head, int val) { //新建一个虚拟头节点,让算法规则统一 ListNode xuniHead = new ListNode(); xuniHead.next = head; //当前节点cur必须指向虚拟头节点 而不是head,因为我们算法统一后是没办法删除cur本身节点的,算法只能删除cur.next及之后的(也就是head及之后的) ListNode cur = xuniHead; while(cur.next!=null){ if(cur.next.val == val){ //相等就跳过中间的一个节点 cur.next = cur.next.next; }else{ //不相等就往后走 cur = cur.next; } } return xuniHead.next; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。