23
04/2015
[LeetCode] Remove Linked List Elements
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.
解题思路:
这道题挺简单的,注意队首为val值的情况即可。
/** * 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; } };
为简化代码,建立一个伪头结点,其next指向head,这样所有的操作都是一样,能够简化代码。
/** * 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; } };
0 条评论