【Java】编写代码,移除未排序链表中的重复结点

来源:互联网 发布:许巍 完美生活 知乎 编辑:程序博客网 时间:2024/04/30 15:54

移除重复结点,需要知道哪些结点是重复的,可以用一个哈希表, 如果有重复的元素,则将该元素从链表里删除,然后继续迭代

hashtable基本用法:

int size();得到键值对数
boolean isEmpty();判断是否为空
boolean containsKey(Object key);判断是否包含以key为键的键值对
boolean containsValue(Object key);判断是否包含以key为值的键值对
Object get(Object key);获取以key为键的对应的值
Object put(Object key, Object value);增加key为键value为值的键值对
Object remove(Object key);去除键为key的键值对
void clear();去除去部键值对

import java.util.Hashtable;public static void deleteDups(LinkListNode n) {LinkListNode previous = null;Hashtable table = new Hashtable();while(n != null){if (table.containsKeys(n.data)) {preious.next = n.next;}else {table.put(n.data, true);previous = n;}n = n.next;}}

进阶:如果不得使用缓冲区

用两个指针,一个current迭代地访问整个链表,一个runner用于检查每个current后续结点是否重复,这样做的时间复杂是O(n2), 空间复杂度是O(1)

public static void deleteDupsNew(LinkListNode head) {if (head == null) return;LinkListNode current = head;while(current != null){LinkListNode runner = current;while (runner.next != null){if(runner.next.data == current.data){runner.next = runner.next.next;}else{runner = runner.next;}}current = current.next;}}


0 0
原创粉丝点击