【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;
	}		
}


删除单链表中重复的值(Java版)

题目:删除带头结点的单链表中重复值的元素(即让每种值的元素只有一个) 解题思路: 用一个动态辅助存储数组,每次要向辅助数组中放入元素时,让辅助数组的长度加1,最长时与单链表一样长,设一...
  • lavor_zl
  • lavor_zl
  • 2015年01月17日 09:31
  • 2184

删除单链表中的重复节点(删除多余项)

题目:如何删除单链表中的重复节点(即保证每个元素只出现一次,删除多余的,且后来出现的元素)。 一个没有排序的单链表,如 list = {a, 1, x, b, e, f, f, e, a, g, h...
  • cyuyanenen
  • cyuyanenen
  • 2016年06月20日 13:46
  • 9357

【链表】C++删除链表中重复的结点

题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 注意要删除的是所...
  • yebanxin
  • yebanxin
  • 2016年07月16日 18:36
  • 1738

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

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

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

#include #include using namespace std; struct ListNode{ int m_nValue; ListNode* m_pNext; }; Li...
  • YoungStunner
  • YoungStunner
  • 2016年01月19日 00:40
  • 228

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

2.1    Write code to remove duplicates from an unsorted linked list.          FOLLOW UP          How...
  • yeswenqian
  • yeswenqian
  • 2013年12月03日 20:05
  • 1438

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

【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given ...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月04日 06:57
  • 1579

C代码实现:操作循环链表按规则移除结点

一组顺序数字 1~10,依123 123 循环数数,每遇到3的位置移除该位置数,重新123继续数;  直至剩余一个数,问该数是多少?  同事提起的一个问题,思考之后使用C语言实...
  • baby_hua
  • baby_hua
  • 2017年12月22日 11:49
  • 30

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

数据结构与算法分析笔记与总结(java实现)--链表8:对排序链表删除重复结点问题...
  • qq_27703417
  • qq_27703417
  • 2017年01月17日 21:12
  • 180

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

请编写代码实现Stack类,该类能够实现后进先出的堆栈功能,要求实现的方法包括: Stack(int) – 实例化指定深度的栈 boolean push(E item) – 向栈顶压入对象...
  • qq_32106517
  • qq_32106517
  • 2017年05月23日 19:24
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】编写代码,移除未排序链表中的重复结点
举报原因:
原因补充:

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