赞
踩
链表的题我们如果没思路的话画图就完事了。链表中我们需要关注三个主要的位置,头,尾,和中任意位置
下面我们来画图解释一下。
我们可以使用双指针来解决这个问题,cur代表当前节点(从head.next开始),prev代表当前节点的前驱(prev=head),(我们先不考虑第一个节点)我们让cur一直往下走,每走一次判断一下当前cur.val是否等于传参传入的value。如果相等的令prev.next=cur.next;(就相当于删除了这个值相等的节点),然后接着走(cur=cur.next),如果不想的的话需要先更新prev的值(prev=cur),再接着走(cur=cur.next),直到全部遍历完结束。到这里我们还有头结点没有判断,我们在判断一下头结点的val是否与传入的val即可
具体代码如下:
class Solution { public ListNode removeElements(ListNode head, int val) { if(head==null) { return null; } ListNode prev=head; ListNode cur=head.next; while(cur!=null) { if(cur.val==val) { prev.next=cur.next; cur=cur.next; }else{ prev=cur; cur=cur.next; } } if(head.val==val) { head=head.next; } return head; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。