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 ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM