[leetcode 퀴즈 노트] Remove Duplicates from Sorted List II

4716 단어 LeetCode
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,Given  1->2->3->3->4->4->5 , return  1->2->5 .Given  1->1->1->2->3 , return  2->3 .
 
문제풀이: 유사Remove Duplicates from Sorted List하지만, 이번에는 중복된 수가 있으면 목록의 모든 이 수를 삭제합니다.
주로 체인 테이블 조작을 고찰하고 새로운 체인 헤드 newNode를 만듭니다. 이 테이블의next 바늘은head를 가리키고 헤드는 커서로 처음에 newNode를 가리키며 중복을 발견할 때while 순환을 이용하여 중복된 요소를 모두 삭제할 수 있습니다. 왜냐하면 헤드는 항상 삭제할 노드 앞의 노드를 가리키기 때문입니다.
코드는 다음과 같습니다.
 1 /**

 2  * Definition for singly-linked list.

 3  * public class ListNode {

 4  *     int val;

 5  *     ListNode next;

 6  *     ListNode(int x) {

 7  *         val = x;

 8  *         next = null;

 9  *     }

10  * }

11  */

12 public class Solution {

13     public ListNode deleteDuplicates(ListNode head) {

14         if(head == null || head.next == null)

15             return head;

16         

17         ListNode newNode = new ListNode(0);

18         newNode.next = head;

19         head = newNode;

20         

21         while(head.next != null && head.next.next != null){

22             if(head.next.val == head.next.next.val){

23                 int val = head.next.val;

24                 while(head.next != null && head.next.val == val){

25                     head.next = head.next.next;

26                 }

27             }

28             else

29                 head = head.next;

30         }

31         

32         return newNode.next;

33     }

34 }

좋은 웹페이지 즐겨찾기