面试题 02.01. 移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

哈希表

import java.util.HashSet;
import java.util.Set;

class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        if (head == null) {
            return null;
        }
        Set<Integer> cache = new HashSet<>();
        ListNode cur = head, pre = null, next;
        while (cur != null) {
            next = cur.next;
            if (cache.contains(cur.val)) {
                pre.next = next;
            } else {
                pre = cur;
            }
            cache.add(cur.val);
            cur = next;
        }

        return head;
    }
}


class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

双重循环

import java.util.Set;

class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode cur = head;
        while (cur != null) {
            ListNode node = cur.next;
            ListNode pre = cur;
            while (node != null) {
                if (node.val == cur.val) {
                    pre.next = node.next;
                } else {
                    pre = node;
                }
                node = node.next;
            }
            cur = cur.next;
        }

        return head;
    }
}


class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

posted @ 2022-01-18 16:43  Tianyiya  阅读(32)  评论(0)    收藏  举报