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