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

原创 2015年07月08日 15:18: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;
	}		
}


相关文章推荐

剑指offer-----删除链表中重复的节点(java版)

一 题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。  二 例子 输入链表:1->2->3->3->4->4->5  处理后为:1->2->...

程序员面试金典: 9.2链表 2.1移除未排序链表中重复的节点

#include #include #include using namespace std; const int MAXSIZE = 10000; /* 问题:编写代码,移除未排序链表中的...

程序员面试金典2.1:编写代码,移除未排序的链表中的重复节点

2.1编写代码,移除未排序的链表中的重复节点 解法一:如果不得使用临时缓冲区,该怎么解决? 要想移除链表中的重复节点,我们需要设法记录有哪些是重复的。这里只需要使用到一个简单的散列表。 在下面的解法中...

移除未排序链表中的重复结点

#include #include using namespace std; struct ListNode{ int m_nValue; ListNode* m_pNext; }; Li...

Chapter 2 | Linked Lists--移除未排序链表中的重复项

2.1    Write code to remove duplicates from an unsorted linked list.          FOLLOW UP          How...

【LeetCode-面试算法经典-Java实现】【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】

【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given ...

数据结构与算法分析笔记与总结(java实现)--链表8:对排序链表删除重复结点问题

数据结构与算法分析笔记与总结(java实现)--链表8:对排序链表删除重复结点问题...

java 编写代码实现Stack类 ,采用单链表

请编写代码实现Stack类,该类能够实现后进先出的堆栈功能,要求实现的方法包括: Stack(int) – 实例化指定深度的栈 boolean push(E item) – 向栈顶压入对象...

剑指offer51--删除排序链表重复结点

在一个排序的链表中,如何删除重复的结点

排序的链表中删除重复的结点

题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5. clas...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】编写代码,移除未排序链表中的重复结点
举报原因:
原因补充:

(最多只允许输入30个字)