题目
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动
思路
最简单的链表删除,要用一个指针记录上一次的节点,然后注意删除的是头结点的情况,为了减少时间,删除以后立即跳出循环。
代码
/**
* 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) {
if(head == NULL){
return NULL;
}
if(head->val == val){
if(head->next == NULL){
return NULL;
}else{
return head->next;
}
}
ListNode* p = head->next;
ListNode* pLast = head;
while(p != NULL){
if(p->val == val){
pLast->next = p->next;
break;
}
pLast = p;
p = p->next;
}
return head;
}
};