zoukankan      html  css  js  c++  java
  • 程序员面试金典-面试题 02.01. 移除重复节点

    题目:

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

    示例1:

    输入:[1, 2, 3, 3, 2, 1]
    输出:[1, 2, 3]
    示例2:

    输入:[1, 1, 1, 1, 2]
    输出:[1, 2]
    提示:

    链表长度在[0, 20000]范围内。
    链表元素在[0, 20000]范围内。
    进阶:

    如果不得使用临时缓冲区,该怎么解决?

    分析:

    哈希表存储出现过的元素,如果当前结点出现过,就删去。如果不使用额外的空间,使用两指针遍历,时间复杂度O(n^2)

    程序:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode removeDuplicateNodes(ListNode head) {
            int[] arr = new int[20001];
            ListNode prev = null;
            ListNode cur = head;
            while(cur != null){
                //delete
                if(arr[cur.val] > 0){
                    prev.next = cur.next;
                    cur = prev.next;
                }else{
                    arr[cur.val] = 1;
                    prev = cur;
                    cur = cur.next;
                }
            }
            return head;
        }
    }
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode removeDuplicateNodes(ListNode head) {
            ListNode p1 = head;
            while(p1 != null && p1.next != null){
                ListNode p2 = p1.next;
                ListNode prev = p1;
                while(p2 != null){
                    //delete
                    if(p2.val == p1.val){
                        prev.next = p2.next;
                        p2 = prev.next;
                    }else{
                        prev = p2;
                        p2 = p2.next;
                    }
                }
                p1 = p1.next;
            }
            return head;
        }
    }
  • 相关阅读:
    ZOJ 3490 String Successor
    ZOJ 3465 The Hive
    ZOJ 3077 Move to Baggage Office
    ZOJ 2836 Number Puzzle
    POJ 2115 C Looooops
    ZOJ 3605 Find the Marble
    扩展欧几里德
    搭配飞行员(网络流)
    最小费用流
    最大流
  • 原文地址:https://www.cnblogs.com/silentteller/p/12396280.html
Copyright © 2011-2022 走看看