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; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步