给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。
(1)直接使用原来的链表来进行移除节点操作:
//不带头结点删除元素节点
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {//删除头结点while(head && head->val == val){ // 注意这里不是ifListNode* tmp = head;head = head->next;delete tmp;}//删除非头结点ListNode* cur = head;while(cur &&cur->next){if(cur->next->val == val){ListNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;}else{cur = cur->next;}}return head;}
};
// 时间复杂度: O(n)
// 空间复杂度: O(1)
(2)设置一个虚拟头结点在进行移除节点操作:
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点dummyHead->next = head; // 将虚拟头结点指向head,这样方面后面做删除操作ListNode* cur = dummyHead;while(cur->next){if(cur->next->val == val){ListNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;}else{cur = cur->next;}}head = dummyHead->next;delete dummyHead;return head;}
};
//时间复杂度: O(n)
//空间复杂度: O(1)