203. 移除链表元素 - 力扣(LeetCode)
示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
示例 2: 输入:head = [], val = 1 输出:[]
示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]
分析:如果是head->val == val则head = head->next
否则则保存节点的前驱和后继,遇到相等的值则pre = tmp->next->next即可。
/*** Definition for singly-linked list.* 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) {}* };*/
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {if (head == NULL) {return NULL;}ListNode *tmp = head;ListNode *pre = NULL;while (tmp != NULL) {pre = tmp;if (tmp == head && tmp->val == val) {head = tmp->next;tmp = tmp->next;continue;}if (tmp->next != NULL && tmp->next->val == val) {pre->next = tmp->next->next;continue;}tmp = tmp->next;}return head;}
};