[leetcode 83]刪除排序鏈表中的重複元素

大一學C語言的時候就沒有學好鏈表,對鏈表一直都比較害怕。這一週芳芳決定直面自己的恐懼,從鏈表開始搞起。

1.題目描述

給定一個排序鏈表,刪除所有重複的元素,使得每個元素只出現一次。

示例 1:

輸入: 1->1->2
輸出: 1->2
示例 2:

輸入: 1->1->2->3->3
輸出: 1->2->3

 

2.代碼實現(C語言)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* deleteDuplicates(struct ListNode* head) {
    struct ListNode* p=head;
    
    if (head==NULL)
    {
        return NULL;
    }
        while(p->next!=NULL)
        {
            if (p->val==p->next->val)
            {
                p->next=p->next->next;
            }
            else
            {
                p=p->next;
                #pre->next=p;
            }
        }
    return head;
            
}

3.思路分析

這個題沒有什麼算法思想,問題在於如何使用鏈表表達。首先將頭指針給一個p指針,這個p指針指向鏈表,然後比較p和p->next的數值是否相同,同則刪除相同的的值p->next,不同則接着遍歷。這裏我有一個疑惑,那麼就是head賦值給p之後p和head應該是是同步變化的。應該是指針部分的問題,想清楚來填坑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章