iT邦幫忙

0

leetcode with python:203. Remove Linked List Elements

  • 分享至 

  • xImage
  •  

題目:

Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

給定一個linked list跟一個目標值(val),刪除linked list所有值和val一樣的node

一題算是簡單的linked list操作

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        ll=ListNode()
        ans=ll
        while head:
            if head.val != val:
                ll.next=ListNode(head.val)
                ll=ll.next
            head=head.next
        return ans.next

先開一個新head來存放新的linked list(ans)
之後開始走訪linked list,值不是val的node全部依序接到ans後面
這樣一個沒有val值的新linked list就完成了
之後回傳ans.next即可
最後執行時間74ms(faster than 88.94%)

除了這個解法以外,我還寫了個遞迴解,如下

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
            while head and head.val==val:
                head=head.next
            if head:
                head.next=self.removeElements(head.next,val)
            return head

一旦head非None且值等於val就無視跳下一個
跳完若head非None的話,head.next也用同樣的方式遞迴下去找
next找好後就回傳head
最後回傳的head就是新linked list的頭了
最後執行時間64ms(faster than 98.50%)

那我們下題見


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

尚未有邦友留言

立即登入留言