83. Remove Duplicates from Sorted List

題目

Given a sorted linked list, delete all duplicates such that each element appears only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

刪除鏈表中重復的元素毁习,保證每個元素只出現(xiàn)一次丈氓。

解題思路

因為鏈表從小到大排序,當前元素的下一個元素只有兩種可能:

  1. 與當前元素相同(即,當前元素在鏈表中重復出現(xiàn))
  2. 大于當前元素(即臣疑,當前元素為鏈表中的唯一元素)

根據(jù)上面的觀察瘾婿,檢查一個元素是否重復出現(xiàn)只需要和該元素的下一個元素進行比較即可。因此狭郑,我們需要兩個指針。第一個指針p指向當前元素汇在,第二個指針t永遠指向p的下一個元素翰萨。

比較tp的值:

  1. tp不相等,那么意味著p為唯一元素糕殉。所以保留該元素亩鬼,然后將指針p移動到下一個元素
  2. tp相等殖告,那么意味著該元素重復出現(xiàn)。所以只保留一份該元素雳锋,刪除重復元素t黄绩。然后p仍指向當前元素,移動t到下一個元素玷过,繼續(xù)與p進行比較爽丹,重復以上步驟,直到tp不相等

舉個例子:

一個鏈表:1->1->1->1->3->4
從頭循環(huán)該鏈表辛蚊,一次循環(huán)中完成以下步驟:
1. p = 1, 
   t = p->next 所以 t = 1
2. t == p?
   比較t和p粤蝎,因為t,p相等,所以刪除t
   注意袋马!刪除t之前初澎,我們要設置p->next = t->next,不然鏈表會斷掉
   新的鏈表:1->1->1->3->4
3. 返回第一步...

因為t永遠是p的下一個元素飞蛹,只要t==p谤狡,那么重復的t都不會刪除直到t=3

代碼

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        
        if(!head) {return NULL;}

        ListNode *p = head, *t;
        
        while(p != NULL) {
            t = p->next;
            if(t != NULL) {
                if(p->val == t->val) { // 當前元素與下一個元素相同
                    p->next = t->next; // p的下一個元素為t的下一個元素
                    delete t; //刪除重復元素t
                }else { // 當前元素與下一個元素不同,移動指針到下一個元素
                    p = p->next;
                }
            }else { // 當前元素為列表中最后一個元素
                return head;
            }
        }
        
        return head;
    }
};
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卧檐,一起剝皮案震驚了整個濱河市墓懂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌霉囚,老刑警劉巖捕仔,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盈罐,居然都是意外死亡榜跌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門盅粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓葫,“玉大人,你說我怎么就攤上這事票顾〈「。” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵奠骄,是天一觀的道長豆同。 經(jīng)常有香客問我,道長含鳞,這世上最難降的妖魔是什么影锈? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上鸭廷,老公的妹妹穿的比我還像新娘枣抱。我一直安慰自己,他們只是感情好靴姿,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布沃但。 她就那樣靜靜地躺著,像睡著了一般佛吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垂攘,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天维雇,我揣著相機與錄音,去河邊找鬼晒他。 笑死吱型,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的陨仅。 我是一名探鬼主播津滞,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灼伤!你這毒婦竟也來了触徐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤狐赡,失蹤者是張志新(化名)和其女友劉穎撞鹉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颖侄,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡鸟雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了览祖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孝鹊。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖展蒂,靈堂內(nèi)的尸體忽然破棺而出又活,到底是詐尸還是另有隱情,我是刑警寧澤玄货,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布皇钞,位于F島的核電站,受9級特大地震影響松捉,放射性物質(zhì)發(fā)生泄漏夹界。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望可柿。 院中可真熱鬧鸠踪,春花似錦、人聲如沸复斥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽目锭。三九已至评汰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痢虹,已是汗流浹背被去。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奖唯,地道東北人惨缆。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像丰捷,于是被迫代替她去往敵國和親坯墨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容