当前位置: 代码迷 >> 综合 >> leetcode 203. Remove Linked List Elements(删除链表中的元素值)
  详细解决方案

leetcode 203. Remove Linked List Elements(删除链表中的元素值)

热度:65   发布时间:2023-11-17 01:23:08.0

题目要求

删除表中所有值为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 Ⅱ(删除有序链表中的重复数字,只保留非重复数字)

原题链接: https://leetcode.com/problems/remove-linked-list-elements/

  相关解决方案