题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* deleteDuplicates(ListNode* head) { // write code here //当头节点为空时返回空 if (head == nullptr) return head; //创建两个指针一个在前一个在后 ListNode* slow = head, *fast = head->next; ListNode* p1 = new ListNode(0); ListNode* p2 = p1; //定义记录数的值 int t = -1001; //当快指针不为空时 while (fast) { //当快慢指针值相同时或慢指针等于记录数 if (slow->val == fast->val || slow->val == t) { //把slow的值赋给t t = slow->val; slow = slow->next; fast = fast->next; } else { //不相等时把slow连接在p1后面 p1->next = slow; //p1后移 p1 = p1->next; //快慢指针后移 slow = slow->next; fast = fast->next; t = p1->val; } } if (slow->val != t) { p1->next = slow; p1 = p1->next; } p1->next = nullptr; return p2->next; } };