LintCode_Remove Linked List Elements

问题描述:

Remove all elements from a linked list of integers that have value val.

样例

Given 1->2->3->3->4->5->3, val = 3, you should return the list as 1->2->4->5

算法思想:遍历数列中的每一个元素,遇到相同的则删除,最关键要注意的就是当链表的首元素就是目标值时;


public LinkNode removeElements(LinkNode head,int val){
        
        //当head本身为空,或者数列只有一个不为目标值的数时,返回本身
        if(head==null||(head.next==null&&head.val!=val)){
            return head;
        }
        
        //p为当前数列头,temp为下一个元素
        LinkNode p=head;
        LinkNode temp=p.next;
        LinkNode q=null;
        
        //如果p的值等于目标值,且下一个值不为空;
        //设置p.next不为空的原因是方法体中设置了p.next,相当于判断前的p的p.next.next;

        while(p.val==val&&p.next!=null){
            p.next=null;
            p=temp;
            temp=p.next;
        }
        
        //如果数列只剩下一个数字,且该数字的数值为目标值,那么删除后,返回值为空;
        if(p.next==null&&p.val==val){
            return null;
        }
        
        //如果数列的第一个数不为目标值,且下一个元素不为空,开始遍历;
        while(temp!=null){
            q=temp.next;
            if(temp.val==val){
                //如果temp值为目标值,则断开p与temp的链接,将p的下一个指向temp的下一个
                //达到链表中删除temp的作用

                p.next=q;
                temp=p.next;
            }else{
                //否则,顺序遍历
                p=temp;
                temp=q;
            }
        }
       return head;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值