题目
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
示例
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
思路
可能会删除头结点,所以我们创建一个哑节点。在最开始定义两个指针,然后往后查找,如果找到这个点了,我们进行相应操作删除这个节点
代码
/**
* 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) {
auto dummy = new ListNode(-1);
dummy->next = head;
auto p = dummy, q = head;
while (q->val != val) p = p->next, q = q->next;
p->next = q->next;
return dummy->next;
}
};