删除链表中等于给定值val的所有节点。
/*** 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) {ListNode* sentinel = new ListNode (0); //建立哨兵节点,其值为0ListNode *prev = sentinel, *curr = head, *toDelete = nullptr; //定义哨兵节点为前一个节点,现节点为链表sentinel -> next = head; //将哨兵节点的向后指针连接到链表while(curr != nullptr) //当前节点后面还不是没有指针时,该循环继续运转{if(curr->val == val) //当前节点值与val相同{prev->next = curr ->next; //前一节点的向后指针与当前指针相同,这样就没有指针将指向当前节点toDelete = curr; //当前节点预备删除}else prev = curr; //若值不相等,则继续往下遍历curr = curr->next;if(toDelete != nullptr) //当toDelete有指针时,该循环开始运行{delete toDelete; //删除当前节点toDelete = nullptr; //将让钱节点的指针清空}}ListNode *ret = sentinel ->next; //删除哨兵delete sentinel;return ret;}};
如果觉得《LeetCode刷题日记 203. 移除链表元素》对你有帮助,请点赞、收藏,并留下你的观点哦!