leetcode - Remove Linked List Elements

leetcode - Remove Linked List Elements

 

 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     ListNode* removeElements(ListNode* head, int val) {
12         //if(head == NULL) return head;
13         while(head!=NULL && head->val == val){
14             head = head->next;
15         }
16         if(head == NULL) return head;
17         ListNode* prev = head;
18         ListNode* p = head->next;
19         while(p!=NULL){
20             if(p->val == val){
21                     p = p->next;
22                     prev->next = p;
23                 }
24                 else{
25                     p = p->next;
26                     prev = prev->next;
27                 }
28             }
29         return head;
30     }
31 };

竟然写了好久——自己的链表真的好差啊……

需要注意必须保存当前节点p和前驱节点prev,如果当前节点=val,那么将前驱节点的next=当前节点的下一节点。

另外head节点要特别处理,因为head所指向的没有前驱节点。所以如果第一个节点=val,直接将head=head->next.

posted @ 2015-05-12 12:35  cnblogshnj  阅读(126)  评论(0编辑  收藏  举报