[LeetCode] Remove Duplicates from Sorted List

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

思路一:

 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 };

思路二:纯粹是练习二级指针的用法,和第一种没有太大区别

 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 };
原文地址:https://www.cnblogs.com/vincently/p/4059404.html