[LeetCode] Remove Linked List Elements, leetcodelinked
Remove Linked List Elements
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
Credits:
Special thanks to @ mithmatt for adding this problem and creating all test cases.
Solution:
This question is quite simple. Pay attention to the fact that the first team is the val value.
/*** Definition for singly-linked list. * struct ListNode {* int val; * ListNode * next; * ListNode (int x): val (x), next (NULL ){}*}; */class Solution {public: ListNode * removeElements (ListNode * head, int val) {ListNode * p = NULL, * q = NULL; while (head! = NULL & head-> val = val) {// p = head; head = head-> next; delete p;} p = head; while (p! = NULL & p-> next! = NULL) {if (p-> next-> val = val) {q = p-> next; p-> next = q-> next; delete q ;} else {p = p-> next ;}} return head ;}};
To simplify the code, create a pseudo-header node with its next pointing to the head, so that all operations are the same and the code can be simplified.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNode* myHead=new ListNode(0); myHead->next=head; ListNode* p=myHead, *q=NULL; while(p->next!=NULL){ if(p->next->val==val){ q=p->next; p->next=q->next; delete q; }else{ p=p->next; } } head=myHead->next; delete myHead; return head; }};