給定一個排序鏈表,刪除所有重復的元素,使得每個元素只出現一次。
示例 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 ;