/** * 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; } };