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 = headprev = dummywhile head:if head.val == val:prev.next = head.nexthead = prevprev = headhead = head.nextreturn 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;
}