LeetCode 203. Remove Linked List Elements *****虚拟头结点

来源:互联网 发布:jre 7u9 windows x64 编辑:程序博客网 时间:2024/05/18 01:48

    • 题目
      • 题意
      • 注意
      • 思路
      • 代码
      • 结果

题目

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
Return: 1 –> 2 –> 3 –> 4 –> 5

题意

给定一个链表,删除所有和val相等的节点

注意

  • 链表中的节点取next和val一定要保证当前节点的不为NULL
  • 第一个元素就等于val属于特殊情况,应该注意考虑

思路

设置好虚拟头结点之后,通过cur指针遍历链表,比较cur->next的结点是否和val相等,相等则删除,不等则移动cur指针。

这里写图片描述

这里写图片描述

代码

class Solution {public:    ListNode* removeElements(ListNode* head, int val) {        ListNode* virtualNode = new ListNode(0);        virtualNode->next = head;        ListNode* cur = virtualNode;        while (cur != NULL)        {            //看当前节点的下一个节点的值是否和传进来的val相等            //所以当头节点也重复了,需要一个虚拟头结点,来判断第一个元素            ListNode* next = cur->next;            if (next != NULL)            {                if (next->val == val)                {                    ListNode *dele = next;                    cur->next = dele->next;                    delete dele;                    //删除一个元素后,就不需要移动当前元素,因为cur的next已经被改变了,下一次继续判断                    continue;                }            }            cur = cur->next;        }        return virtualNode->next;    }};

结果

这里写图片描述

原创粉丝点击