Given a sorted Linked List, delete all duplicates such that each element appear onlyOnce.
For example,
Given1->1->2, Return1->2.
Given1->1->2->3->3, Return1->2->3.
Thought 1:
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 *deleteDuplicates(ListNode *head) {12 if (head == NULL) return NULL;13 14 for (ListNode *prev = head; prev->next != NULL;) {15 ListNode *q = prev->next;16 if (prev->val == q->val) {17 prev->next = q->next;18 delete q;19 } else {20 prev = prev->next;21 }22 }23 24 return head;25 }26 };
Train of Thought 2: It is purely a practice of second-level pointer usage, and there is no big difference with the first one
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 *deleteDuplicates(ListNode *head) {12 if (head == NULL || head->next ==NULL) return head;13 14 for (ListNode **curr = &head; (*curr)->next != NULL; ) {15 ListNode *q = (*curr)->next;16 if ((*curr)->val == q->val) {17 (*curr)->next = q->next;18 delete q;19 } else {20 curr = &((*curr)->next);21 }22 }23 24 return head;25 }26 };
[Leetcode] remove duplicates from sorted list