【LeetCode】Remove Duplicates from Sorted List

질문 주소: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++의 헤드 포인터 와 유사 합 니 다.자바 에 포인터 개념 이 없습니다)우 리 는 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;
        
    }
}

좋은 웹페이지 즐겨찾기