1.编写代码,移除未排序链表中的重复结点。如果不得使用临时缓冲区,该怎么解决?

思路:直接迭代访问整个链表,将每个结点加入散列表。若发现有重复元素,则将该结点从链表中移除,然后继续迭代。使用链表。只需扫描一次即可。时间复杂度是o(N),N是链表结点数目。

import java.util.Hashtable;

class LinkedListNode {
    int data;
    LinkedListNode next;
}

public class DeleteNodes {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        LinkedListNode head = new LinkedListNode();
                head.data = 1;
                LinkedListNode node = new LinkedListNode();
                node.data = 1;
                head.next = node;
                LinkedListNode tmp = head;
                while (tmp != null) {
                     System.out.println(tmp.data);
                     tmp = tmp.next;
               }
               tmp = deleteDups(head);
               System.out.println("after delete");
               while (tmp != null) {
                    System.out.println(tmp.data);
                    tmp = tmp.next;
               }

    }
    //使用临时缓冲区
    public static LinkedListNode deleteDups(LinkedListNode n) {
        Hashtable table = new Hashtable();
        LinkedListNode head = n;//保存头结点
        LinkedListNode current = head;
        while (n != null) {
            if (table.containsKey(n.data)) {
                current.next = n.next;
            } else {
                table.put(n.data, true);
                current = n;
            }
            n = n.next;
        }
        return head;
    }
}
View Code

相关文章:

  • 2022-12-23
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
  • 2021-06-16
  • 2021-09-12
  • 2022-12-23
猜你喜欢
  • 2021-07-28
  • 2022-12-23
  • 2021-12-01
  • 2022-12-23
  • 2021-09-09
  • 2021-09-22
  • 2022-12-23
相关资源
相似解决方案