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.