iT邦幫忙

1

Ruby解題分享--Remove Duplicates from Sorted List

  • 分享至 

  • xImage
  •  

Yes

哎~~心法沒有,拳法太弱....


Remove Duplicates from Sorted List

題目連結:https://leetcode.com/problems/remove-duplicates-from-sorted-list/
題目重點:是否瞭解Linked List。

wiki-鏈結串列
wiki-單向連結串列

這題會在於是否瞭解怎麼處理資料型態,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資料型態做處理的話,這樣解不行。
最近看別人解答,發現不少人會這樣處理一些特別的資料型態,我還感受不到好還是不好,但是能解開就很厲害了。

保持資料型態來解,以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為何。
我就菜!


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言