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



  • 相关阅读:
    linux & xp 双系统 重装的问题
    判断推理类试题的复言命题考点与题型总结
    Oracle、MySQL、SQL Server数据库的数据类型的差异
    java环境变量设置和问题及解决方法
    如何正确卸载MySQL,主要是删除注册表中的垃圾信息
    J2EE经典面试题及答案
    正则表达式
    囚犯的两难处境
    MySQL 数值数据类型
    linux学习之SHELL脚本
  • 原文地址:https://www.cnblogs.com/wangyaning/p/7853998.html
Copyright © 2020-2023  润新知