给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动
示例 1:
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
示例 2:输入: head = [4,5,1,9], val = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
说明:
题目保证链表中节点的值互不相同
若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
思路
这道题主要是要考虑到一些边界条件,像删除的是第一个和最后一个得单独判断;
其他中间的节点就只要上一个节点的next指向当前的下一个节点就可删除当前节点了
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
// 保存结果头指针
ListNode* result= head;
// 保存前一个指针
ListNode* before= NULL;
while(head){
if(head->val== val){
// 要删除的不是第一个
if(before){
// 删除的不是最后一个
if(head->next)
before->next= head->next;
else
before->next= NULL;
}
else{
// 删除的是第一个
result= head->next;
}
break;
}
before= head;
head= head->next;
}
return result;
}
};