刪除線性表中的重復(fù)數(shù)據(jù)-使用單鏈表實(shí)現(xiàn)

tag 重復(fù)數(shù)據(jù) 線性表 單鏈表

思想

  1. 使用雙指針?lè)ǎ瑫r(shí)標(biāo)記前后兩個(gè)數(shù)據(jù),這里有一點(diǎn),如果只有一個(gè)數(shù)據(jù),那就直接返回?cái)?shù)組就好啦
  2. 如果數(shù)組的長(zhǎng)度大于等于2
    1. 使用first標(biāo)記第一個(gè)數(shù)據(jù),second標(biāo)記第二個(gè)數(shù)據(jù)
    2. 如果first.data != second.data ,那么first和second就可以同時(shí)前進(jìn)
    3. 如果first.data == second.data, 就不斷的使second前進(jìn),直到找到一個(gè)first.data != second.data
      1. first前進(jìn)一格,因?yàn)閒irst和當(dāng)初前面的second是重復(fù)數(shù)據(jù),而first本身不重復(fù),所以first前進(jìn)一格
      2. first.data = second.data
    4. 重復(fù)1-3直到second達(dá)到最末尾,現(xiàn)在從第一個(gè)到first標(biāo)記的數(shù)據(jù)都是不重復(fù)的數(shù)據(jù),也就是說(shuō)first就是不重復(fù)數(shù)據(jù)的最終標(biāo)記

代碼

 ListNode first = head;  
        if(first == null)
            return head;
        ListNode second = first.next;

        while(second != null) {
            if(second.val != first.val) {
                first = first.next;
                first.val = second.val;
            }
            second = second.next;
        }
        first.next = null;
        return head;

總結(jié)

  1. 不同同時(shí)走,相同前停留;如果不同到,前進(jìn)賦值好
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容