问题描述:
删除链表中等于给定值val的所有节点
样例:给出链表1->2->3->3->4->5->3,和val=3,你需要返回的是删除3之后的链表:1->2->4->5。
实现思路:
如果链表为空直接返回NULL;当第一个节点(head)的值等于给定的值时,如果head->next ==NULL,直接返回NULL。否则, head = head->next,循环直到 head->val != val时终止while语句;进行下一步,遍历整个链表。
代码:
ListNode *removeElements(ListNode *head, int val) {
if ( head == NULL )
{ return NULL;}
while ( head->val == val)
{ if (head->next == NULL)
return NULL;
head = head->next;
}
for (ListNode* p = head; p->next != NULL ; )
{ if ( ( p->next)->val == val )
{ p->next=(p->next)->next;}
else
{ p = p->next;}
}
return head;
}
感想:
先考虑当第一个节点的值等于给定节点的值时应进行的操作;还要考虑当链表为空时的特殊情况;