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,head作为游标,初始指向newNode,然后当发现重复的时候,就可以利用一个while循环把重复的元素全部删除了,因为head总是指向要删除的节点前面一个节点。
代码如下:
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 }