哎~~心法沒有,拳法太弱....
題目連結:https://leetcode.com/problems/remove-duplicates-from-sorted-list/
題目重點:是否瞭解Linked List。
這題會在於是否瞭解怎麼處理資料型態,Array與Linked List的差異。
由於我還不夠熟悉Linked List,無法正確分享介紹Linked List內容。
[1, 1, 2]的Linked List回傳[1, 2],
那我們多設一個方法,抓入每個node的值就好,但是重複的不要。
重點在於要知道1, 1, 2是每個node的值,要知道所有節點的值需要用ListNode這個類別內建立好的方法來抓取。
可以在leetcode上操作Run code來看
def delete_duplicates(head)
p head.val #=> 1
p head.next.val #=> 1
p head.next.next.val #=> 2
p head.next.next.next #=>nil
end
解法:
def delete_duplicates(head)
return [] if head.nil? #7, 跑答案,發現還有一個測試例子是[]
@arr = [] #2,建立一個預設是空陣列的實體
val_to_arr(head) #5,呼叫抓取值方法
@arr.uniq #6,[1, 1, 2]變陣列了,uniq方法就回來了。
end
def val_to_arr(head) #1,先定義一個抓取值的方法
@arr << head.val #3.抓取方法的流程
val_to_arr(head.next) if head.next #4.抓取到跑到nil為止,method寫method,迴圈。
end
當然,如果遇到希望我們維持Linked List資料型態做處理的話,這樣解不行。
最近看別人解答,發現不少人會這樣處理一些特別的資料型態,我還感受不到好還是不好,但是能解開就很厲害了。
我自己解只解到
def delete_duplicates(head)
while head&.next
if head.val == head.next.val
head.next = head.next.next
else
head = head.next
end
end
head
end
查高手們解答如下。
def delete_duplicates(head)
new_head = head #如果不了解Linked list的特性,應該就是卡在這一步。
while new_head&.next #new_head != nil && new_head.next != nil
if new_head.val == new_head.next.val
new_head.next = new_head.next.next
else
new_head = new_head.next
end
end
head
end
不懂的事情不要裝懂,無法解釋的事情算不懂。
網路上很多資訊,我正在努力了解中,希望有一天能解釋並分享Linked List為何。我就菜!