给定一个排序的链表,删除所有重复项,使每个元素仅出现一次。
例如,
给定1-> 1-> 2,则返回1-> 2。
给定1-> 1-> 2-> 3-> 3,返回1-> 2-> 3。
这个问题的关键是使用正确的循环条件。并更改每个循环中必需的内容。您可以使用不同的迭代条件,例如以下两种解决方案。
解决方案1
/**
* 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 prev = head;
ListNode p = head.next;
while(p != null){
if(p.val == prev.val){
prev.next = p.next;
p = p.next;
//no change prev
}else{
prev = p;
p = p.next;
}
}
return head;
}
}
解决方案2
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode p = head;
while( p!= null && p.next != null){
if(p.val == p.next.val){
p.next = p.next.next;
}else{
p = p.next;
}
}
return head;
}
}