题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/**
* 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;
}
}; 
查看7道真题和解析