Leetcode每日一题 83.删除排序链表中的重复元素
83.删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
示例 1:
1 2
| 输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]
|
示例 2:
1 2
| 输入:head = [1,1,1,2,3] 输出:[2,3]
|
提示:
链表中节点数目在范围 [0, 300] 内
-100 <= Node.val <= 100
题目数据保证链表已经按升序排列
跟昨天的题没啥区别,照样建新表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
class Solution {
public: ListNode* deleteDuplicates(ListNode* head) { if(head == nullptr)return head; ListNode * newhead = new ListNode(-1); newhead->next = nullptr; unordered_map<int,int> maps; ListNode * pre = head; while(pre != nullptr) { maps[pre->val]++; pre = pre->next; }
pre = newhead; ListNode * cur = head; while(cur != nullptr) { while( cur != nullptr && maps[cur->val] > 1) { cur = cur->next; } if(cur != nullptr) { ListNode * node = new ListNode(cur->val); pre->next = node; pre = pre->next; node->next = nullptr; } else break; cur = cur->next; } return newhead->next; } };
|