问题地址: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;
}
}