題目說明:給定一個排序過後的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)進行比較
附上程式碼以及註解
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