Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode{
int val;
struct Link *next;
}ListNode;
struct ListNode *Init(int n){
ListNode * head,*list,*p;
head=(ListNode *)malloc(sizeof(ListNode));
head->next=NULL;
scanf("%d",&head->val);
p=head;int i;
for(i=0;i<n-1;i++){
list=(ListNode *)malloc(sizeof(ListNode));
list->next=NULL;
scanf("%d",&list->val);
p->next=list;
p=list;
}
return head;
};
struct ListNode* deleteDuplicates(struct ListNode* head) {
ListNode * p,*q;
p=head;
q=head->next;
while(p->next){
if(p->val==q->val){
p->next=q->next;
q=p->next;
}
else{
p=q;
q=q->next;
}
}
return head;
}
int main(){
int n;
scanf("%d",&n);
ListNode *head;
head=Init(n);
head=deleteDuplicates(head);
while(head){
printf("%d ",head->val);
head=head->next;
}
return 0;
}