zoukankan      html  css  js  c++  java
  • leetcode 203 Remove Linked List Elements

    

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

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



    我的解法:




    // Linklist.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    
    #include<iostream>
    using namespace std;
    
    
      struct ListNode
      {
          int val;
          ListNode *next;
          ListNode(int x) : val(x), next(NULL) {}
      };
     
    
    
        ListNode* removeElements(ListNode* head, int val) 
        {
            if(head == NULL)return head;
            
            ListNode* pre = NULL;
            ListNode* root = head;
            ListNode* current = head;
            
            
            while(current!=NULL)
            {
                
                if(current->val == val)
                {
                    if(pre==NULL)
                    {
    					current = current->next;
                        root = current;
                        
    
                    }
                    else
                    {
                        pre->next = current->next;
                        current = current->next;
                        
                    }
                    
                   
                }
                else
                {
                    pre = current;
                    current =current->next;
                    
                    
                }
            }
            
            return root;
        }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	ListNode* temp = new ListNode(2);
    	ListNode* temp_next = new ListNode(1);
    	temp->next = temp_next;
    	removeElements(temp,1);
    	return 0;
    }
    
    


    python的解法:


    class Solution:
        # @param {ListNode} head
        # @param {integer} val
        # @return {ListNode}
        def removeElements(self, head, val):
            dummy = ListNode(-1)
            dummy.next = head
    
            prev = dummy
            while head:
                if head.val == val:
                    prev.next = head.next
                    head = prev
                prev = head
                head = head.next
            return dummy.next
    



    一个非常简洁的解法:


    struct ListNode* removeElements(struct ListNode* head, int val) 
    {
        if (head&&head->val==val)head=removeElements(head->next, val);
        if (head&&head->next)head->next=removeElements(head->next, val);
        return head;
    }
    



  • 相关阅读:
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 50 Pow(x,n)
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 49 字母异位词分组
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 48 旋转图像
    Java实现 LeetCode 47 全排列 II(二)
    Java实现 LeetCode 47 全排列 II(二)
  • 原文地址:https://www.cnblogs.com/wangyaning/p/7853999.html
Copyright © 2011-2022 走看看