当前位置: 代码迷 >> 综合 >> 力扣203. 移除链表元素(哑节点,哨兵节点遍历)
  详细解决方案

力扣203. 移除链表元素(哑节点,哨兵节点遍历)

热度:33   发布时间:2024-03-09 04:16:51.0

力扣203. 移除链表元素(哑节点,哨兵节点遍历)

删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

哑节点,哨兵节点遍历

开一个哑节点,prev保留前一个节点指针,curr代表是否需要删除的节点指针。

  • 如果要删除,prev->next=curr->next;     curr=curr->next;
  • 如果不删除,prev=prev->next;     curr=curr->next;

复杂度分析

  • 时间复杂度:O(N),只遍历了一次。
  • 空间复杂度:O(1)。
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {if(head==nullptr)return head;ListNode* dummy=new ListNode(INT_MIN);dummy->next=head;ListNode* prev=dummy;ListNode* curr=head;ListNode* deletep=nullptr;while(curr!=nullptr){if(curr->val==val){deletep=curr;prev->next=curr->next;curr=curr->next;delete(deletep);}else{prev=prev->next;curr=curr->next;}}return dummy->next;}
};

 

  相关解决方案