tag 重復(fù)數(shù)據(jù) 線性表 單鏈表
思想
- 使用雙指針?lè)ǎ瑫r(shí)標(biāo)記前后兩個(gè)數(shù)據(jù),這里有一點(diǎn),如果只有一個(gè)數(shù)據(jù),那就直接返回?cái)?shù)組就好啦
- 如果數(shù)組的長(zhǎng)度大于等于2
- 使用first標(biāo)記第一個(gè)數(shù)據(jù),second標(biāo)記第二個(gè)數(shù)據(jù)
- 如果first.data != second.data ,那么first和second就可以同時(shí)前進(jìn)
- 如果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 - 重復(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é)
- 不同同時(shí)走,相同前停留;如果不同到,前進(jìn)賦值好