ホーム LeetCode. 83. Remove Duplicates from Sorted List
記事
キャンセル

LeetCode. 83. Remove Duplicates from Sorted List

image

問題

解法

リストはソート済みなので、同じ値は必ず隣り合っています。ポインターを1つ使い、現在まで残した最後のノードを指します。次のノードの値が現在のノードと同じなら次のノードを飛ばし、異なるならポインターを次へ進めます。各ステップで、headからポインターまでには、処理済みの異なる値ごとにノードが1つだけ、ソート順で保たれます。最後に残るノードは元のリストの末尾なので、その next は null のままであり、結果に循環は生じません。

各ノードを一度ずつ確認するため、時間計算量は O(N) です。入力ノードを再利用し、追加領域の計算量は O(1) です。

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
 * 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 node = head;
        while (node != null && node.next != null) {
            if (node.val == node.next.val) {
                node.next = node.next.next;
            } else {
                node = node.next;
            }
        }
        return head;
    }
}
この記事は著者により CC BY 4.0 ライセンスで公開されています。