删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
但要注意两个值连在一起的情况:
实例:
输入:1->1, val = 1
输出:[]
如果有两个连续的节点值要删除,注意在删除这个节点后,节点不要后移,否则会少删除后一个相同值的节点,我加了这么一个语句作为判断:
if(pNode->next != NULL && pNode->next->val != val)
{
pNode = pNode->next;
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *dummy = malloc(sizeof(struct ListNode));
struct ListNode *tmpNode;
dummy->next = head;
struct ListNode *pNode = dummy;
// if(pNode == NULL || pNode->next == NULL)
// {
// return pNode->next;
// }
//这里要同时判断下面这两种情况,否则会报链表零指针的情况
while(pNode != NULL && pNode->next != NULL)
{
if(pNode->next->val == val)
{
tmpNode = pNode->next;
pNode->next = pNode->next->next;
free(tmpNode);
}
//这里也要判断链表的下一个节点是不是零指针,否则编译会报零指针错误
if(pNode->next != NULL && pNode->next->val != val)
{
pNode = pNode->next;
}
}
return dummy->next;
}