程序员人生 网站导航

leetcode 203 Remove Linked List Elements

栏目:综合技术时间:2015-06-09 08:34:17


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(⑴) 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



1个非常简洁的解法:


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



------分隔线----------------------------
------分隔线----------------------------

最新技术推荐