(203)-(Remove Linked List Elements )-(在单链表中删除值为给定值的所有节点)-(头尾的判断)

(203)-(Remove Linked List Elements )-(在单链表中删除值为给定值的所有节点)-(头尾的判断)


//在单链表中删除值为给定值的所有节点
public class Solution 
{
    //尽量先不用递归,因为我已经理不清逻辑了
    public ListNode removeElements(ListNode head, int val) 
    {        
        //考虑删除头节点好麻烦啊,还有尾节点
        //这样删完后,也要随时更新判断是否到头了
        //1 1 1 最后为空
        //说了多少遍了,这个顺序特别重要,还是写反了
        //while(head.val==val && head!=null)
        while(head!=null &&head.val==val)
        {
            //head.next为空,也进行赋值,合理,不care
            head=head.next;
        }
        if(head==null)
        {
            return null;
        }
        if(head.next==null)
        {
            if(head.val==val)
            {
                return null;
            }
            else
            {
                return head;
            }
        }
        //这里肯定超过1个值,且头节点不等于目标值 2 1
        ListNode temp=head;
        while(temp.next!=null)
        {
            //不相等,就跳过
            if(temp.next.val!=val)
            {
                temp=temp.next;
            }
            else
            {
                //删除temp.next,
                //temp.next.next为空,也进行赋值,合理,同样不care
                temp.next=temp.next.next;
            }
        }
        //注意不是返回temp,尾插法相似
        return head;    
    }
}

 

posted @ 2015-07-26 21:37  爱吃萝卜干  阅读(105)  评论(0编辑  收藏  举报