哎~~心法没有,拳法太弱....
题目连结: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为何。
我就菜!
<<: 在 Debian 11 上直接用 Fcitx 5 与呒虾米
>>: The way of flushing QNAP DOM
创建App-讯息界面 今天进行讯息界面,本界面会使用Button、Text Field等基本UI来建...
vite 是 Vue.js 的作者所做的一个新的 bundler ,如果你有用过应该会知道,它最特别...
元件间的转换 在元素间的转换可以更加简单,,因为有了这一个动态组件 当按下单选键A会出现Compon...
开启Document物件 doc = doc.Document("档名.docx"...
前面在讲要查询 commit 时要看他的 SHA-1 码,这个 SHA-1 到底是什麽!今天就来补充...