【IT筆記試験面接問題整理】無秩序チェーンテーブルで重複するノードを削除

5698 ワード

【問題の説明】関数を定義し、チェーンテーブルを入力し、無秩序チェーンテーブルで重複するノードを削除する
【参考コード】
方法1:
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     }

方法2:
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();

    }