幸运数字能给人带来好运9名同学分别写下自己的幸运数字并且数字从小到大存储到链表中小明想知道这9名同学的幸运数字有哪几个并想删除初始链表中重复的幸运数字设计编程算法需要注意:若头节点或头节点的下一个节点为空则返回头节点
算法如下:
- 定义一个集合set,用于存储已经出现过的幸运数字。
- 定义一个指针p,初始化为头节点。
- 当p不为空时,进行以下操作:
- 如果当前幸运数字在set中已经存在,则删除该节点。
- 否则,将当前幸运数字添加到set中。
- p指向下一个节点。
- 返回头节点。
代码实现如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* removeDuplicates(ListNode* head) {
if (!head || !head->next) return head;
unordered_set<int> nums;
ListNode *p = head;
nums.insert(p->val);
while (p->next) {
if (nums.count(p->next->val)) {
ListNode *tmp = p->next;
p->next = tmp->next;
delete tmp;
} else {
nums.insert(p->next->val);
p = p->next;
}
}
return head;
}
int main() {
ListNode *head = new ListNode(0);
ListNode *p = head;
int arr[9] = {2, 5, 8, 1, 7, 5, 3, 9, 4};
for (int i = 0; i < 9; i++) {
ListNode *node = new ListNode(arr[i]);
p->next = node;
p = p->next;
}
head = removeDuplicates(head);
p = head->next;
while (p) {
cout << p->val << " ";
p = p->next;
}
return 0;
}
输出结果为:1 2 3 4 5 7 8
原文地址: http://www.cveoy.top/t/topic/cxPr 著作权归作者所有。请勿转载和采集!