这道题比较巧妙,以前我们删除链表中的节点,是通过找出链表中被删除节点的前一个点,使它的地址直接指向被删除的下一个点。
而在这里我们使通过每找出一个不同的值就直接覆盖到原链表上,最后使链表的尾节点后面尾空节点即可。
步骤:
1.创建指向当前尾节点的指针。
2.从第二个点开始遍历,若当前尾指针指向的值与原链表的值不相同,那么就加入到链表中、
3.最后使尾节点的后面等于空节点。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head)return head;
auto cur=head;
for(auto p=cur->next;p;p=p->next){
if(p->val!=cur->val){
cur=cur->next=p;
}
}
cur->next=NULL;
return head;
}
};