思路描述:
用pre和now去删除节点,由于头节点也有可能删除,因此先建一个Head节点连头节点。
pre从Head开始,用now去判断是否重复
如果重复,循环到下一个不同元素之前,把之间的相同元素直接跳过。
再向前移动pre和now指针。
图解描述
当cur->next && cur->next->val == cur->val时
当cur->next && cur->next->val != cur->val时
当执行完以上的判断条件后cur指针向前移动一格
代码描述
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode *cur = head;
struct ListNode *nhead = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *pre= nhead;
nhead->next= head;
while(cur){
if(cur->next && cur->next->val == cur->val){
while(cur->next &&cur->next->val==cur->val )
{
cur = cur->next;
}
pre->next=cur;
}
else{
pre=cur;
}
cur = cur->next;
}
return nhead->next;
}