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;
    }
    



  • 相关阅读:
    0x00 Java 研习录
    0x00 Linux From Scratch 实战
    第一章:Java编程入门
    陈洋总结
    pthread_detach
    explicit用法
    Java动态加载DLL方法
    ToolHelp32 函数
    android根据子view里面的数量自动排版的一个ViewGroup
    安装CocoaPods学习
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301350.html
Copyright © 2011-2022 走看看