CCI 2.1 移除未排序链表中的重复节点

本文详细介绍了如何通过不使用临时缓冲区的方法来移除未排序链表中的重复节点,并提供了两种不同的解决方案。解决方案一利用HashSet来记录已遍历过的节点值,避免重复。解决方案二则直接在链表上操作,通过比较相邻节点的值来移除重复节点。两种方法都旨在提高算法效率,减少内存使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写代码,移除未排序链表中的重复节点。

进阶,

如果不得使用临时缓冲区,该怎么解决?

package test;

import java.util.HashSet;

public class RemoveDup {

	//利用HashSet
	public Node removeDup(Node head){
		if(head==null || head.next==null)
			return head;
		Node newHead = new Node(0);
		newHead.next = head;
		Node point = newHead;
		HashSet<Integer> set = new HashSet<Integer>();
		while(point.next != null){
			if(set.contains(point.next.val))
				point.next = point.next.next;
			else{
				set.add(point.next.val);
				point = point.next;
			}
		}
		return newHead.next;
	}
	
	//不利用临时缓冲区
	public Node removeDup(Node head){
		if(head==null || head.next==null)
			return head;
		Node current = head;
		while(current != null){
			Node point = current;
			whille(point.next != null){
				if(point.next.val == current.val)
					point.next = point.next.next;
				else
					point = point.next;
			}
			current = current.next;
		}
		return head;
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值