题目描述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
1.此题对比原题有改动
2.题目保证链表中节点的值互不相同
3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
算法思路
- 建立虚拟头节点
- 双指针
代码
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param val int整型
* @return ListNode类
*/
ListNode* deleteNode(ListNode* head, int val) {
// write code here
//建立虚拟头节点
ListNode* myhead = new ListNode(-1);
myhead->next = head;
//建立双指针
ListNode* pre = myhead;
ListNode* cur = myhead->next;
while (cur)
{
if (cur->val == val) {
cur = cur->next;
pre->next = cur;//指针从新指向
break;
}
cur = cur->next;//没有找到元素,指针cur下移
pre = pre->next;
}
return myhead->next;
}
};