删除排序链表中的数值相同节点

问题

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

思路

记录当前节点cur和前一个节点pre。每次更新这两个节点。记得释放删除的节点,防止内存泄漏。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head == NULL)
        {
            return NULL;
        }
        ListNode* pre = head;
        ListNode* l = head;
        ListNode* cur = head->next;
        while(cur != NULL)
        {
            if(cur->val == pre->val)
            {
                ListNode* tmp = pre->next;
                pre->next = cur->next; 
                cur = cur->next;
                delete tmp;
            }
            else
            {
                pre = pre->next;
                cur = cur->next;
            }
        }
        return l;
    }
};

递归版本