题解 | #删除有序链表中重复的元素-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;
}
};
查看6道真题和解析