p36 单链表删除元素 (leetcode 203)

一:解题思路

这道题目是常规的链表删除的题目,为了使链表的第一个元素和链表的其他元素处理具有相同的方式,创建一各虚拟的节点,让这个虚拟的头节点的next指针指向链表的首节点。Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution 
{
public:
    ListNode* removeElements(ListNode* head, int val) 
    {
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* p = dummy;

        while (p->next!=NULL)
        {
            if (p->next->val == val)
            {
                ListNode* toDel = p->next;

                p->next = toDel->next;
            }
            else
            {
                p = p->next;
            }
        }

        return dummy->next;
    }
};

Java:

class Solution {
    public ListNode removeElements(ListNode head, int val)
    {
          ListNode dummy=new ListNode(0);
          dummy.next=head;
          ListNode p=dummy;

          while(p.next!=null)
          {
              if(p.next.val==val)
              {
                  ListNode toDel=p.next;
                  p.next=toDel.next;
              }
              else
              {
                  p=p.next;
              }
          }

          return dummy.next;
    }
}

 

posted @ 2020-03-15 15:01  repinkply  阅读(148)  评论(0)    收藏  举报