给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
若使用 C 或 C++ 语言,你不需要 free
或 delete
被删除的节点?
思路:遍历链表,开始在p=head处考虑。
当p->val == val时,删除p,返回p后面的链表头节点。
当p->next->val != val时,向后遍历,直到p->next->val == val时止。删除p->next即可。
class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if(!head)
return head;
if(head->val == val)
return head->next;
ListNode* p=head;
while(p->next && p->next->val != val){
p=p->next;
}
if(p->next && p->next->val == val)
p->next = p->next->next;
return head;
}
};
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
d = head
if head.val==val:
return head.next
while head and head.next:
if head.next.val == val:
head.next = head.next.next
break
head = head.next
return d