移除链表元素
LeetCode:删除链表中等于给定值 val 的所有节点
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解题思路:
定义一个指针,让这个指针遍历链表,然后判断每个节点的val 和我们要删除的val是否相等,如果相等,则删除这个节点(链表不能断),如果不相等,则往下走,直到遍历完整个链表。(要考虑到一些特殊情况,不要遗漏)
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* pcur=NULL;
struct ListNode*pcurpre=NULL;
pcur=head;
pcurpre=pcur;
if(head==NULL)
{
return NULL;
}
else
{
while(pcur)
{
if(pcur->val==val)
{
if(head==pcur)
{
head=head->next;
free(pcur);
pcur=head;
}
else
{
pcurpre->next=pcur->next;
free(pcur);
pcur=pcurpre->next;
}
}
else
{
pcurpre=pcur;
pcur=pcur->next;
}
}
}
return head;
}
运行结果: