LintCode: Remove Linked List Elements

C++

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     /**
12      * @param head a ListNode
13      * @param val an integer
14      * @return a ListNode
15      */
16     ListNode *removeElements(ListNode *head, int val) {
17         // Write your code here
18         // Find the first non-Val node
19         while ( head != NULL && head->val == val ) {
20             head = head->next;
21         }
22         // If the head is NULL, return
23         if ( head == NULL ) {
24             return head;
25         }
26         // Remove the left val nodes
27         ListNode *pre = head;
28         ListNode *cur = pre->next;
29         while ( cur != NULL ) {
30             if ( cur->val != val ) {
31                 pre->next = cur;
32                 pre = pre->next;
33             }
34             cur = cur->next;
35         }
36         // In case of the tail has val node
37         pre->next = cur;
38         // return
39         return head;
40     }
41 };

 

posted @ 2015-11-26 19:27  ZH奶酪  阅读(253)  评论(0编辑  收藏  举报