题目要求
删除表中所有值为val的元素, 注意一个表中可能多个节点值为val, 要保证全部删除。
示例
//Example:
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
解题思路
遍历链表,当下一个节点值为val的时候进行删除操作。
为了解决删除链表中的指定元素这类问题,总结了一个三步走战略。
1、判断是不是空表。
2、若不是空表,判断要删的元素是不是在表头。head = head->next;
3、若删除元素不在表头,而是在表中间时,找前驱,改后继。 p->next = p->next->next;
主要代码c++
/*** 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 == NULL)return head;//删除点在表头时while(head->val == val){
head = head->next; if(head == NULL) //这里别忘了,表头元素删除完后可能变成空表break;}ListNode* p = head;// 删除点在表中间时while(p && p->next){
if(p->next->val == val)p->next = p->next->next; // 找前驱,改后继。elsep = p->next;} return head;}
};
说明:
题目比较简单,但是千万不要忘记,空表和节点位置在表头的情况,熟记三步走策略(特别是1,3步)能够很好的帮助我们避免犯错,有时会把这几个情况放在一个while里进行考虑,多刷刷题,灵活掌握。
相似题目:
解答:leetcode83. Remove Duplicates from Sorted List(删除有序链表中的重复项)
解答:leetcode82. Remove Duplicates from Sorted List Ⅱ(删除有序链表中的重复数字,只保留非重复数字)