存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
思路:
遍历链表,删除重复元素
struct ListNode* deleteDuplicates(struct ListNode* head){
if(head==NULL){
return head;
}
struct ListNode*prev=malloc(sizeof(struct ListNode));//重新创建一个结点指向头节点,头节点可能会被删除
prev->next=head;
struct ListNode*curr=prev;
while(curr->next&&curr->next->next){//当前结点和下一个结点都不为NULL
if(curr->next->val==curr->next->next->val){//两个结点值相同
int val=curr->next->val;
while (curr->next&&curr->next->val==val){//删除重复结点直到不同
curr->next=curr->next->next;
}
}else{
curr=curr->next;
}
}
return prev->next;
}