删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为 1→1→2, 返回1→2.
给出的链表为 1→1→2→3→3, 返回1→2→3.
数据范围:链表长度满足 0≤n≤100,链表中任意节点的值满足 ∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)
# 示例1
输入:{1,1,2}
返回值:{1,2}
# 示例2
输入:{}
返回值:{}
/* struct ListNode {
* int val;
* struct ListNode *next;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
struct ListNode* deleteDuplicates(struct ListNode* head ) {
// write code here
struct ListNode* p0;
struct ListNode* p1;
struct ListNode* p2;
p0 = head;
if(p0==NULL || p0->next==NULL)
{
return p0;
}
while(p0!=NULL && p0->next!=NULL)
{
p1 = p0->next;
p2 = p1->next;
if(p0->val==p1->val)
{
p0->next = p2;
p1->next = NULL;
}
else
{
p0 = p1;
}
}
return head;
}