方法:
S1:定义指针变量cur指向当前节点,初始化指向头结点,cnext指向当前节点的下一个节点
S2:判断cur和cnext指向的节点的值是否相等,如果相等,则让cur指向cnext的下一个节点,即删除cnext指向的节点;否则,cur指针后移一位,继续判断。
这里cnext存在的前提是cur存在。让cur指向cnext的前提是cnext存在,所以需要进行判断。
C++实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//1: 判断重复元素 2:删除重复元素
ListNode* cur = head;
while(cur != NULL){//条件判断1
ListNode* cnext = cur->next;
if(cnext == NULL) return head;//条件判断2
else if(cur->val == cnext->val){//条件判断3
cur->next = cnext->next;
}
else cur = cur->next;
}
return head;
}
};