解析:判断fast对应的数等不等于val,不等于则fast和slow均向后移动一位;再判断fast对应的数等不等于val,不等于则fast和slow均向后移动一位;再判断fast对应的数等不等于val,等于了,找到要删除的了,则让slow里面的地址存放4里面的地址,跳过3;
Node* DelNode(Node *Head, int val)//删除val结点
{
Node* fast = Head;
Node* slow = nullptr;
while (fast)//通过循环遍历链表找到要删除的结点
{
if (fast->val == val)
{
if (fast == Head) //找到头结点
{
Node*p = Head->next;//记录新的头结点
delete Head;//释放删除的头结点
return p;
}
else //没找到头结点
{
slow->next = fast->next;
delete fast;
return Head;
}
break;
}
slow = fast;
fast = fast->next;
}
return Head;
}
int main()//主函数
{
vector<int> vec = { 1,2,3,4,5 };
Node* HEAD = CreatList(vec);
Node* p = HEAD;
//利用while循环遍历链表
Node* p = DelNode(HEAD, 3);
while (p)
{
cout << p->val << " ";
p = p->next;
}
}