/**
* 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.
1: 输入已经排好序
2: 删除所有的重复值节点(保证单链表中的值 是不唯一的)
*/
//
// RemoveDuplicatesfromSortedList.c
// Algorithms
//
// Created by TTc on 15/6/22.
// Copyright (c) 2015年 TTc. All rights reserved.
//
/**
* 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.
1: 输入已经排好序
2: 删除所有的重复值节点(保证单链表中的值 是不唯一的)
*/
#include "RemoveDuplicatesfromSortedList.h"
#include <stdlib.h>
#include <string.h>
#include "List.h"
/********************************************************************/
// LeetCode 答案
/********************************************************************/
struct ListNode {
int val;
struct ListNode *next;
};
//单链表已经是排序好的
struct ListNode*
deleteDuplicates(struct ListNode* head) {
struct ListNode *curr = head;
while(curr != NULL && curr->next != NULL){
//如果当前节点的值 等于 当前节点的下一个节点的值 则删除 当前节点指向的下一个节点
if(curr->next->val == curr->val)
curr->next = curr->next->next;
else curr = curr->next; //否则让当前节点指向下一个元素节点;准备下一次遍历条件
}
return head;
}
/********************************************************************/
/********************************************************************/
/********************************************************************/
// List.c 是范性类 单链表
/********************************************************************/
ListElmt*
tt_deleteDuplicates(ListElmt* head) {
ListElmt *curr = head;
while(curr != NULL && curr->next != NULL){
//如果当前节点的值 等于 当前节点的下一个节点的值 则删除 当前节点指向的下一个节点
if((*(int *)(curr->next->data)) == (*(int *)(curr->data)))
curr->next = curr->next->next;
else curr = curr->next; //否则让当前节点指向下一个元素节点;准备下一次遍历条件
}
return head;
}
void
test_tt_deleteDuplicates(){
List l1;
list_init(&l1, free);
int *data ;
int array[15] = {1,1,2,3,3,4,5,5,5,6}; //输入时排序好的链表
for (int i = 0; i< 10; i++) {
if ((data = (int *)malloc(sizeof(int))) == NULL)
return ;
*data = array[i];
if (list_ins_next(&l1, NULL, data) != 0) //逐个插入元素
return;
}
print_list(&l1);
ListElmt *result = tt_deleteDuplicates(list_head(&l1));
printf("result->val===%d\n",*(int *)result->data);
print_listNode(result);
}