zoukankan      html  css  js  c++  java
  • 【IT笔试面试题整理】删除无序链表中重复的节点

    【试题描述】定义一个函数,输入一个链表,删除无序链表中重复的节点

    【参考代码】

    方法一:

    Without a buffer, we can iterate with two pointers: “current” does a normal iteration, while 
    “runner” iterates through all prior nodes to check for dups Runner will only see one dup 
    per node, because if there were multiple duplicates they would have been removed already

     1 public static void deleteDups(LinkList head)
     2     {
     3         if (head == null)
     4             return;
     5         Link previous = head.first;
     6         Link current = previous.next;
     7         while (current != null)
     8         {
     9             Link runner = head.first;
    10             while (runner != current)
    11             {
    12                 if (runner.id == current.id)
    13                 {
    14                     Link tmp = current.next;
    15                     previous.next = tmp;
    16                     current = tmp;
    17                     break;
    18                 }
    19                 runner = runner.next;
    20             }
    21 
    22             if (runner == current)
    23             {
    24                 previous = current;
    25                 current = current.next;
    26             }
    27         }
    28 
    29         System.out.println("-----------");
    30         head.displayList();
    31     }


    方法二:

    If we can use a buffer, we can keep track of elements in a hashtable and remove any dups:

        public static void deleteDups2(LinkList head)
        {
            if (head == null)
                return;
            Hashtable table = new Hashtable();
            Link previous = null;
            Link current = head.first;
            while (current != null)
            {
                if (table.containsKey(current.id))
                    previous.next = current.next;
                else
                {
                    table.put(current.id, true);
                    previous = current;
                }
                current = current.next;
            }
            System.out.println("-----------");
            head.displayList();
        }
  • 相关阅读:
    nyoj112-指数运算
    nyoj51-管闲事的小明
    nyoj29-求置转换问题
    nyoj24-素数 距离问题
    nyoj22-素数求和问题
    nyoj23-取石子(一)
    nyoj4-ASCII码排序
    nyoj169-素数
    并查集:CDOJ1593-老司机破阵 (假的并查集拆除)
    线段树: CDOJ1598-加帕里公园的friends(区间合并,单点更新)
  • 原文地址:https://www.cnblogs.com/WayneZeng/p/9290756.html
Copyright © 2011-2022 走看看