zoukankan      html  css  js  c++  java
  • leetcode 面试题 02.01. 移除重复节点

    import java.util.HashSet;
    import java.util.Set;
    
    /**
     * @Class RemoveDuplicateNodes
     * @Description 面试题 02.01. 移除重复节点
     * 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
     * <p>
     * 示例1:
     * 输入:[1, 2, 3, 3, 2, 1]
     * 输出:[1, 2, 3]
     * <p>
     * 示例2:
     * 输入:[1, 1, 1, 1, 2]
     * 输出:[1, 2]
     * <p>
     * 提示:
     * 链表长度在[0, 20000]范围内。
     * 链表元素在[0, 20000]范围内。
     * <p>
     * @Author 
     * @Date 2020/6/26
     **/
    public class RemoveDuplicateNodes {
        static class ListNode {
            int val;
            ListNode next;
    
            ListNode(int x) {
                val = x;
            }
        }
    }
    
    /**
     * 解法: 利用set不重复的性质或者哈希表,额,HashSet底层就是HashMap
     */
    public static ListNode removeDuplicateNodes(ListNode head) {
    	if (head == null) {
    		return null;
    	}
    
    	ListNode newListHead = new ListNode(0);
    	ListNode newListNode = newListHead;
    	Set<Integer> integerSet = new HashSet<>();
    	ListNode listNode = head;
    
    	while (listNode != null) {
    		int val = listNode.val;
    		if (integerSet.add(val)) {
    			ListNode tempNode = new ListNode(val);
    			newListNode.next = tempNode;
    			newListNode = newListNode.next;
    		}
    		listNode = listNode.next;
    	}
    	return newListHead.next;
    }
    
    // 测试用例
    public static void main(String[] args) {
    	// 1, 2, 3, 3, 2, 1
    	ListNode listNode11 = new ListNode(1);
    	ListNode listNode12 = new ListNode(2);
    	listNode11.next = listNode12;
    	ListNode listNode13 = new ListNode(3);
    	listNode12.next = listNode13;
    	ListNode listNode14 = new ListNode(3);
    	listNode13.next = listNode14;
    	ListNode listNode15 = new ListNode(2);
    	listNode14.next = listNode15;
    	ListNode listNode16 = new ListNode(1);
    	listNode15.next = listNode16;
    	listNode16.next = null;
    	ListNode listNodeAns = removeDuplicateNodes(listNode11);
    	System.out.print("demo01 result:");
    	while (listNodeAns != null) {
    		System.out.print(" " + listNodeAns.val);
    		listNodeAns = listNodeAns.next;
    	}
    	System.out.println("");
    
    	//[1, 1, 1, 1, 2]
    	ListNode listNode21 = new ListNode(1);
    	ListNode listNode22 = new ListNode(1);
    	listNode21.next = listNode22;
    	ListNode listNode23 = new ListNode(1);
    	listNode22.next = listNode23;
    	ListNode listNode24 = new ListNode(1);
    	listNode23.next = listNode24;
    	ListNode listNode25 = new ListNode(2);
    	listNode24.next = listNode25;
    	listNodeAns = removeDuplicateNodes(listNode21);
    	System.out.print("demo02 result:");
    	while (listNodeAns != null) {
    		System.out.print(" " + listNodeAns.val);
    		listNodeAns = listNodeAns.next;
    	}
    	System.out.println("");
    }
    
  • 相关阅读:
    原来实现钉钉自动签到如此简单,每天准时上下班不是梦
    12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(下)
    12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(中)
    12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)
    python 学习笔记之手把手讲解如何使用原生的 urllib 发送网络请求
    发生线上故障后问责是不是第一要务
    软件工程是否可以直接应用于小团队
    阶段性正确的一点记录
    Java7新特性
    从server.xml看Tomcat容器的层次结构
  • 原文地址:https://www.cnblogs.com/fyusac/p/13194074.html
Copyright © 2011-2022 走看看