题目描述
描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
1.此题对比原题有改动。
2.题目保证链表中节点的值互不相同。
3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点。
数据范围:0<=链表节点值<=10000,0<=链表长度<=10000。
输入:{2,5,1,9},5
返回值:{2,1,9}
说明:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 2 -> 1 -> 9
输入:{2,5,1,9},1
返回值:{2,5,9}
说明:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 2 -> 5 -> 9
解题思路
删除链表的节点:最直观的想法是,将删除链表的节点分为两类,一类是删除的就是头节点,那么就直接返回头节点的下一个节点,另一类是删除的不是头节点,那么就利用被删除节点的前驱来删除对应的节点,注意对节点的判空。
ListNode* deleteNode(ListNode* head, int val)
{
//保存头节点信息用于使用
ListNode *p=head;
//要删掉的是头节点
if(p->val==val)
return p->next;
//要删掉的不是头节点 通过节点的前驱来实现删除
while(p&&p->next)
{
if(p->next->val==val) //删除对应节点
{
p->next=p->next->next;
break;
}
p=p->next;
}
return head;
}