Remove Duplicates from Sorted List 체인 테이블에서 중복 요소 제거 @LeetCode

1961 단어
제목:
정렬된 체인 테이블에서 중복 요소 제거
아이디어:
두 개의 바늘로, 하나의base는 비교된 대상을 가리키고, 다른cur는 현재 비교된 대상을 가리킨다.
만약cur가 가리키는 원소와base가 가리키는 원소가 같으면 중복 원소를 건너뛰고 base를 업데이트하지 않습니다.
만약...다르면 베이스를 업데이트합니다.
cur는 계속 업데이트되고 있습니다.
package Level1;
import Utility.ListNode;

/**
 * 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.
 */
public class S83 {

	public static void main(String[] args) {
		ListNode n1 = new ListNode(1);
		ListNode n2 = new ListNode(1);
		n1.next = n2;
		ListNode n3 = new ListNode(2);
		n2.next = n3;
		
		ListNode x = deleteDuplicates(n1);
		x.print();
	}

	public static ListNode deleteDuplicates(ListNode head) {
		ListNode base = head;  // base  
		if(head==null || head.next == null){
			return head;
		}
		ListNode cur = head.next;		// cur 
		
        while(base!=null && cur!=null){
        	if(base.val == cur.val){		//  
        		base.next = cur.next;
        	}else{		//  base
        		base = base.next;
        	}
        	cur = cur.next;	//  cur
        }
        
        return head;
    }
}
/**
 * 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) {
        if(head==null || head.next==null){
            return head;
        }
        ListNode p = head, q = head;
        while(q != null){
            if(q.val == p.val){
                q = q.next;
            }else{
                p.next = q;
                p = q;
            }
        }
        p.next = q;     // Take care of last element! eg 1,1
        return head;
    }
}

좋은 웹페이지 즐겨찾기