问题描述:
Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well.
删掉重复节点
直接遍历:
关键在于判断while循环停止时,最后的node是之前没出现过的还是重复的。如果是之前出现过的,酒吧上一个no duplicate node 的下一个设为null从而结束程序,否则要把最后一个node连上。
上代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head==null) return null;
ListNode iter = head;
ListNode last_no_duplicate = head;
int current_int = head.val;
while (iter.next!=null){
while ((iter.next!=null)&&(iter.val==current_int)){
iter=iter.next;
}
if((iter.next==null) && (iter.val!=current_int)) {
last_no_duplicate.next = iter;
return head;
}
else if ((iter.next==null) && (iter.val==current_int)){
last_no_duplicate.next=null;
return head;
}
last_no_duplicate.next = iter;
current_int = iter.val;
last_no_duplicate = iter;
}
return head;
}
}
时间复杂度: O(n)