思路描述: 用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; }