删除链表节点

Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

初次写的代码:使用双指针先定位到val值的节点,然后删除。

public:
    ListNode* deleteNode(ListNode* head, int val) {
        ListNode *l1,*l2;
        l1=head;
        l2=head->next;
        if(l1->val\=\=val)return l2;
        while(l2&&l2->val!=val)
        {
            l1=l1->next;
            l2=l2->next;
        }
        if(l2&&l2->val\=\=val)l1->next=l2->next;
        return head;
    }
};

改进:

public:
    ListNode* deleteNode(ListNode* head, int val) {
        if(head->val\=\=val)return head->next;  //判断头节点是否为val值。使用head提到前面判断成功可以节省空间
        ListNode *l1,*l2;
        l1=head;
        l2=head->next;
        while(l2&&l2->val!=val)
        {
            l1=l1->next;
            l2=l2->next;
        }
        if(l2)l1->next=l2->next;  //这里不需要判断l2->val\=\=val,l2
存在则说明有val值的点,不存在则没有。
        return head;
    }
};