标签:leetcode
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.
注意第一个节点和最后一个节点的处理
/** * 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) { if (!head) return NULL; ListNode* pre,*h=head; while (h && h->val == val && h->next){ // 删除在前面所有值为val的节点 h->val = h->next->val ; h->next = h->next->next ; } if (h->val == val) return NULL; // 此时 必定只有一个元素 else { // pre 为 h 前面的节点 pre = h; h = h->next; } while (h) { // 删除值为val的节点 if (h->val == val) { pre->next = h->next; h = h->next; } else { pre = h; h = h->next; } } return head; // 返回头结点 } };
在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* newH; newH->next = head; ListNode* cur = newH; while (cur->next) { if (cur->next->val == val) { cur->next = cur->next->next; } else cur = cur->next; } return newH->next; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
leetcode-203-Remove Linked List Elements
标签:leetcode
原文地址:http://blog.csdn.net/u014705854/article/details/46916177