> For the complete documentation index, see [llms.txt](https://jenhsuan.gitbook.io/algorithm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jenhsuan.gitbook.io/algorithm/leetcode/83.-remove-duplicates-from-sorted-list.md).

# 83. Remove Duplicates from Sorted List

## 1.問題

* 如果linked list中的元素出現超過一次, 則list只讓該元素出現一次

![](/files/-LNcsysCEIOI-mMIAPKv)

## 2.想法&#x20;

* 提問:
* function header, parameter
* test input
* 說明想法&#x20;
  * **一邊移動一邊移除node:**
    * Create一個dummy node, 初始狀態下\*pre指向這個node, newNode->next = head, 這樣無論是要移除哪個node等同於從list中間移除node
    * pre->next = curr->next
    * curr->next = NULL
    * pre = pre->next
* 測試計算複雜度

## 3.程式碼

```
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* tmp = new ListNode(0);
        ListNode* curr = head;
        ListNode* pre = tmp;
        pre->next = curr;
        while (curr && curr->next) {
            if (curr->val == curr->next->val) {
                pre->next = curr->next;
                curr->next = NULL;
                curr = pre->next;
            } else {
                pre = curr;
                curr = curr->next;
            }
        }
        
        return tmp->next;
    }
};
```
