1、问题概述:给定一个已排序链表的头,删除重复元素,返回已排序的链表
2、示例
示例 1:
输入:head = [1,1,2] 输出:[1,2]示例 2:
输入:head = [1,1,2,3,3] 输出:[1,2,3]
3、分析
(1)先查看是否为空表
(2)定义2个指针,一个当前指针,一个指向替换指针
(3)循环链表
(4)判断当前数据值是否和下一个数据值相等
(5)如果相等:
temp=当前元素指向的下一个节点
cur的next = temp的next
使用free函数释放当前重复元素值
4、代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
// 查看是否为空表
if(!head){
return head;
}
// 定义当前的指针和替换指针,一开始使当前指针指向头结点
struct ListNode *cur,*temp;
cur=head;
// 替换数据
while(cur->next!=NULL){
// 处理重复元素
if(cur->val==cur->next->val){
temp=cur->next;
cur->next=temp->next;
free(temp);
}
else{
cur=cur->next;
}
}
return head;
}