/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
/* 方法一:重新构造一个新的List */
struct ListNode* deleteDuplicates_mathed1(struct ListNode* head) {
Node node, *p = head;
node.next = NULL;
node.val = INT_MAX;
Node *rear = &node;
Node *last_p = NULL;
if(!head){
return NULL;
}
while(p->next){
if(p->val != p->next->val){
rear->next = (Node *)malloc(sizeof(Node));
rear = rear->next;
rear->val = p->val;
rear->next = NULL;
}else{
int tmp = p->val;
while(p && p->val == tmp){
p = p->next;
}
if(!p){
break;
}
continue;
}
p = p->next;
}
if(p){
rear->next = (Node *)malloc(sizeof(Node));
rear = rear->next;
rear->val = p->val;
rear->next = NULL;
}
return node.next;
}
/* 方法二:在原来List的基础上,将不重复的节点添加到一个新链表上 */
struct ListNode* deleteDuplicates(struct ListNode* head) {
Node node, *p = head;
node.next = NULL;
node.val = INT_MAX;
Node *rear = &node;
Node *last_p = NULL;
Node *q = NULL;
if(!head){
return NULL;
}
while(p->next){
if(p->val != p->next->val){
last_p = p;
}else{
int tmp = p->val;
while(p && p->val == tmp){
q = p;
p = p->next;
free(q);
}
if(!p){
break;
}
continue;
}
p = p->next;
rear->next = last_p;
rear = rear->next;
rear->next = NULL;
}
if(p){
rear->next = p;
rear = rear->next;
rear->next = NULL;
}
return node.next;
}