首页 > 其他分享 >移除List的统一逻辑写法 LeetCode 203

移除List的统一逻辑写法 LeetCode 203

时间:2022-10-15 14:34:20浏览次数:51  
标签:203 ListNode cur val List 结点 next 移除 head

原理:通过创建一个新的结点,放在头结点的前面,作为真正头结点的前驱结点,这样头结点就成为了意义上的非头结点,这样就可以统一操作结点的删除操作。

需要注意的是:这个新的结点是虚拟头结点,真的的头结点依然是它的后继结点,所以在C++中,我们依然需要手动删除这个虚拟头结点,返回的结点是它后面的那个结点

struct ListNode {
     int val;
     ListNode *next;
     ListNode() : val(0), next(nullptr) {}
    ListNode(int x) : val(x), next(nullptr) {}
    ListNode(int x, ListNode *next) : val(x), next(next) {}
 };
/*
ListNode *tmp=head;
head=head->next;
delete tmp;


*/
class Solution {
public:
   ListNode* removeElements(ListNode* head, int val) {
   	ListNode* virtualhead = new ListNode(0);
   	virtualhead->next = head;
   	ListNode* cur = virtualhead;
   	while (cur->next != nullptr) {
   		if (cur->next->val == val) {
   			ListNode* t = cur->next;
   			cur->next = cur->next->next;
   			delete t;
   		}
   		else {
   			cur = cur->next;
   		}
   		head = virtualhead->next;
   		delete virtualhead;
   		return head;
   	}





   }
};

标签:203,ListNode,cur,val,List,结点,next,移除,head
From: https://www.cnblogs.com/FJCLJ/p/16794168.html

相关文章