删除链表节点
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;
}
};