Given the head
of a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. Return the linked list sorted as well.
Example 1:
Input: head = [1,2,3,3,4,4,5] Output: [1,2,5]
Example 2:
Input: head = [1,1,1,2,3] Output: [2,3]
Constraints:
[0, 300]
.-100 <= Node.val <= 100
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode() : val(0), next(nullptr) {}
- * ListNode(int x) : val(x), next(nullptr) {}
- * ListNode(int x, ListNode *next) : val(x), next(next) {}
- * };
- */
- class Solution {
- public:
- ListNode* deleteDuplicates(ListNode* head) {
- ListNode *dummy = new ListNode(-1), *cur = dummy;
- dummy->next = head;
- while (cur->next && cur->next->next) {
- if (cur->next->val == cur->next->next->val) {
- int x = cur->next->val;
- while (cur->next && cur->next->val == x) {
- //ListNode* freeNode = cur->next;
- cur->next = cur->next->next;
- //delete freeNode;
- //freeNode == nullptr;
- }
- } else {
- cur = cur->next;
- }
- }
- return dummy->next;
- }
- };
- class Solution {
- public:
- ListNode* deleteDuplicates(ListNode* head) {
- if (head == nullptr || head->next == nullptr) {return head;}
- if (head->val != head->next->val) {
- head->next = deleteDuplicates(head->next);
- return head;
- }
- ListNode* tmp = head->next;
- while (tmp != nullptr && tmp->val == head->val) {tmp = tmp->next;}
- return deleteDuplicates(tmp);
- }
- };
- /**
- * Definition for singly-linked list.
- * public class ListNode {
- * int val;
- * ListNode next;
- * ListNode() {}
- * ListNode(int val) { this.val = val; }
- * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
- * }
- */
- class Solution {
- public ListNode deleteDuplicates(ListNode head) {
- ListNode dummy = new ListNode(-1), cur = dummy;
- dummy.next = head;
- while (cur.next != null && cur.next.next != null) {
- if (cur.next.val == cur.next.next.val) {
- int x = cur.next.val;
- while (cur.next != null && cur.next.val == x) {
- cur.next = cur.next.next;
- }
- } else {
- cur = cur.next;
- }
- }
- return dummy.next;
- }
- }
- class Solution {
- public ListNode deleteDuplicates(ListNode head) {
- if (head == null || head.next == null) {return head;}
- if (head.val != head.next.val) {
- head.next = deleteDuplicates(head.next);
- return head;
- }
- ListNode tmp = head.next;
- while (tmp != null && tmp.val == head.val) {tmp = tmp.next;}
- return deleteDuplicates(tmp);
- }
- }