描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→2返回1→2
给出的链表为1→1→2→3→3返回1→2→3
数据范围:链表长度满足 0≤n≤1000 \le n \le 1000≤n≤100,链表中任意节点的值满足 ∣val∣≤100|val| \le 100∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)
示例
输入: {1,1,2}
返回: {1,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 *L=head;
if(head==NULL||head->next==NULL){
return head;
}
while(L->next!=NULL){//一直比到倒数第二个元素,防止在->next->next时报越界
if(L->val==L->next->val){
L->next=L->next->next;//此时的值与其后的值相等,直接跳过指向下下个指针
}else{
L=L->next;
}
}
return head;
}