- 这道题有个姐妹题,本题是重复元素留一个,另一道题是重复元素都去掉,区别在于是循环去重还是单个去重,意思是cur是一次跳多步还是一次跳一步
- 另一道题中,只要cur.val == next.val,next = next.next,pre.next=next,这是在循环体里,保证pre.next取到的是相等元素的后一个,而此处只做一次循环,当cur.val==next.val,pre.next=next,保证当前pre.next就是相等元素的第二个,如果还有相等,依次后移,这样做是为了pre=cur时不会脱节。
- 我觉得这道题还可以使用队列,当待入队的数与队首的数一致,则丢弃(姐妹题可同时队首的数丢弃),剩下的就都是符合题意的了。
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
ListNode node = new ListNode(-1);
node.next = head;
ListNode next;
ListNode cur = head;
ListNode pre = node;
while(cur!=null){
next = cur.next;
boolean flag = false;
if(next != null && cur.val == next.val){
flag = true;
pre.next = next;
}
if(!flag)pre = cur;
cur = next;
}
return node.next;
}
}