/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// write code here
ListNode* node = new ListNode(-1);
ListNode* pre = node; // pre 保存不同节点的前一个节点
node->next = head;
while(head && head->next) { // 比较当前值和下一个节点值
auto ne = head->next;
if(ne->val != head->val) { // 如果当前值和下一个节点值不同
pre = head; // pre保存当前节点
head = ne; // 节点往后移动一个位置
}
else {
int x = head->val; // 如果当前节点值和下一个节点值相同
while(head && head->val == x) { // 一直遍历到节点不同的情况
head = head->next;
}
}
pre->next = head; // 让保存的不同节点的前一个节点的下一个节点连接上当前节点
}
return node->next;
}
};