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.