C语言 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3。
思路:定义3个指针分别是p当前的,q下一个,和temp临时的(用来释放内存),利用while循环进行指针递推(while的结束条件q!=NULL)
然后当p=q 是时候 ,先temp存放q的临时指针变量,q指针后移,p的指针域指向q
当p!=q时候,把q的指针赋给p,q指针后一位。
注意:不要忘记phead是空链表的情况,否则提交失败!!
struct ListNode* deleteDuplicates(struct ListNode* head){
if(head==NULL) return NULL ; //要注意是否为空链表!!!
struct ListNode* p =head ;
struct ListNode* q =p->next ;
struct ListNode* temp = NULL ;
while(q!=NULL)
{
if(p->val == q->val)
{
temp= q ;
q=q->next ;
p->next=q;
free(temp);
}
else
{
p=q;
q=q->next ;
}
}
return head ;