iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
自我挑戰組

從leetcode學習資料結構和演算法系列 第 3

Day 3 Remove Duplicates from Sorted List

  • 分享至 

  • xImage
  •  

題目說明:給定一個排序過後的Linked list,要你移除掉重複的部分

Case 1:

Input: head = [1,1,2]
Output: [1,2]。
原因:1有重複

Case 2:

Input: head = [1,1,2,3,3]
Output: [1,2,3]。
原因:1,3重複

解題思路:當遇到重複的數值時,要將原本下一個的指標變成下下一個

順便複習一下Linked list的特性以及和陣列(array)進行比較

  1. 非連續(array是連續的)
  2. 用節點存取資料,節點包含data以及next
  • data是用來純存資料內容
  • next是用來指向下一個節點
  1. 在新增或刪除時只需要耗費O(1)(array移除要耗費O(n)的時間,因為要搬移位置)
  2. 長度為動態可改變的(array是固定的)

附上程式碼以及註解

Java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
       ListNode curr=head;//設定變數從linked list的頭(第一個)開始
       while(curr!=null&&curr.next!=null){
           if(curr.val==curr.next.val){//如果目前的數值和其指向下一個的數值相同
               curr.next=curr.next.next;//原本指向下一個節點的指標變成指向下下一個節點
           }
           else{
               curr=curr.next;//沒有相等的話維持不變(指向下一個節點)
           }
       }
        return head;//回傳整個linked list
    }
}

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        curr=head#設定變數從linked list的頭(第一個)開始
        while curr and curr.next:#當前節點以及其下一個節點都不能為空值
            if curr.val==curr.next.val:#如果目前的數值和其指向下一個的數值相同
                curr.next=curr.next.next#原本指向下一個節點的指標變成指向下下一個節點
            else:
                curr=curr.next#沒有相等的話維持不變(指向下一個節點)
        return head#回傳整個linked list

上一篇
Day 2 Search Insert Position
下一篇
Day 4 Unique Paths
系列文
從leetcode學習資料結構和演算法31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言