简单说一下自己的思路:
首先要确定一个头,第一个不是重复数字的头,第一个循环确定本身不是空置且有下一个节点,取头节点值,和后面的对比,如果相同就继续找不同的。头结点和下一个节点相同则可以确定头节点。
然后就是去除链表上的重复节点,cur指向的是肯定不是重复结点,首先指向头,然后指向头下两个不同节点中的第一个,然后依次向下找。
感觉还是比较清晰的,就是代码行数太多了。优点是用的常数空间
public class RemoveDuplicatesfromSortedListII{
public static ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
while (head != null && head.next != null) {
int first = head.val;
if (head.next.val != head.val) {
break;
}
while (head != null && head.val == first) {
head = head.next;
}
}
if (head == null) {
return head;
}
ListNode cur = head;
while (cur != null && cur.next != null) {
if (cur.next != null && cur.next.next == null) {
break;
}
if (cur.next.val == cur.next.next.val) {
int temp = cur.next.val;
while (cur.next != null && cur.next.val == temp) {
cur.next = cur.next.next;
}
continue;
}
cur = cur.next;
}
return head;
}
}