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