【LeetCode】Remove Duplicates from Sorted List

本文详细解析了如何通过编程解决链表中删除重复元素的问题,包括链表的基本概念、解决思路以及AC代码实现。

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

问题地址:http://oj.leetcode.com/problems/remove-duplicates-from-sorted-list/

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

思路:题目非常简单,这里做一个记录只是对链表有的新的理解和认识。之前对与链表其实没有完全理解,但是通过这道题目可以说是完全理解了,对于链表新的理解:

(1)链表的每一个单元是独立的,只不过是里面的next指针把他们连接起来而已。

(2)如下函数deleteDuplicates返回的是类型是ListNode,所有要想改变之后的链表形式,必须修改里面的next指针的指向单元,最终返回的也是这个链表的头节点(其实类似于C++中的头指针,只不过在java中没有指针的概念),我们让pre=head;那么就认为这两个对象指向同一片内存空间。


AC代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
       Set<Integer> nodeSet = new HashSet<Integer>();
		ListNode pre = null;
		ListNode newHead = head;
		while (head != null) {
			if (!nodeSet.contains(head.val)) {
				nodeSet.add(head.val);
				pre=head;
			}
			else{
				pre.next=head.next;
			}
			head = head.next;
		}
		return newHead;
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值