题目:
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。并返回删除后的链表的头节点。
示例 1:
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
struct ListNode
{
int val;
ListNode* next;
ListNode(int x) :val(x), next(NULL) {};
};
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val)
{
ListNode* pNode = head;
if (head->val == val)
{
head = head->next;
return head;
}
while (pNode->next)
{
if (pNode->next->val == val)
{
//waring************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//在这里判断的时候,注意要用pNode->next->next,不要用pNode->next
//否则无法修改节点了。要记住了哦
if (pNode->next->next)
{
pNode->next = pNode->next->next;
//这两个return语句写错了,返回head,pNode只是一个过程变量,
//在这个过程中改变的是head这个链表本身
return head;
}
//
else
{
pNode->next = NULL;
//注意昂,记好了哦~
return head;
}
}
else
pNode = pNode->next;
}
}
};
int main()
{
ListNode pHead1 = ListNode(4);
ListNode pHead2 = ListNode(5);
ListNode pHead3 = ListNode(1);
ListNode pHead4 = ListNode(9);
pHead1.next = &pHead2;
pHead2.next = &pHead3;
pHead3.next = &pHead4;
Solution s1;
ListNode* heand=s1.deleteNode(&pHead1, 1);
return 0;
}