本文共 1327 字,大约阅读时间需要 4 分钟。
难度中等
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:输入: 1->2->3->3->4->4->5
输出: 1->2->5 示例 2:输入: 1->1->1->2->3
输出: 2->3(1)通过两个指针判断相邻的两个节点值是否相同 (2)如果存在重复则进行去重 (3)设置bool变量判断两类 前后值不一样的情况 1)前值是重复元素的最后一位 2)前值是单独的一位
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode* ans = new ListNode(-1); ans->next = head; ListNode* cur = ans->next; ListNode* pre = ans; bool isConti = false; while (cur != NULL && cur->next != NULL) { int left = cur->val; int right = cur->next->val; //若两个节点相同,删除重复元素 if (left == right) { cur->next = cur->next->next; isConti = true; } //两个节点值不同,仍然存在重复元素 else if (left != right && isConti) { pre->next = cur->next; cur = cur->next; isConti = false; } //两个节点值不同,不存在重复元素 else if (left != right && !isConti) { cur = cur->next; pre = pre->next; } } if (isConti) { pre->next = NULL; } return ans->next; }};
可通过扩大遍历指针的覆盖范围解决 需要前后值进行比较的问题
转载地址:http://uvowi.baihongyu.com/