存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
private boolean equal(ListNode n1, ListNode n2) {
if (n1 == null && n2 == null) {
return true;
}
if (n1 == null || n2 == null) {
return false;
}
return n1.val == n2.val;
}
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return head;
}
ListNode nextHead = new ListNode(), tail = nextHead;
ListNode cur = head, pre = null;
while (cur != null) {
/**
* 当前元素重复
*/
while (cur != null && (equal(pre, cur) || equal(cur, cur.next))) {
pre = cur;
cur = cur.next;
}
tail.next = cur;
tail = cur;
cur = cur != null ? cur.next : null;
}
return nextHead.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}