首页 > 代码库 > 【leetcode刷题笔记】Remove Duplicates from Sorted List II

【leetcode刷题笔记】Remove Duplicates from Sorted List II

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             else29                 head = head.next;30         }31         32         return newNode.next;33     }34 }