题目链接
思路分析
既然要对链表中的节点进行删除,那么保存前一个节点是十分重要的,然后考虑下极端情况,如果删除的是第一个节点,他没有前一个节点,因此还需要一个虚拟头节点。
代码实现
/**
* 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* newNode = new ListNode(-1);
newNode->next = head;
ListNode* phead = head;
ListNode* pre = newNode;
while(phead != NULL)
{
if(phead->val == val)
{
pre->next = phead->next;
break;
}
pre = phead;
phead = phead->next;
}
return newNode->next;
}
};