/**
*
* 存在一个按升序排列的链表,给你这个链表的头节点 head ,
* 请你删除链表中所有存在数字重复情况的节点,
* 只保留原始链表中 没有重复出现 的数字。
*
* 返回同样按升序排列的结果链表。
*
*/
/**
*
* @param head 要删除重复元素的链表
* @return 返回删除后的新链表
*/
public ListNode deleteDuplicates2(ListNode head) {
//判断节点是否为空或者是否只有一个节点
if (head == null || head.next == null){
return head;
}
//因为链表的第一第二个元素可能重复,因此需要一条新链表让它的下一个元素指向head
ListNode newHead = new ListNode(0,head);
//定义辅助变量用于遍历
ListNode cur = newHead;
while (true){
//循环结束的条件
if (cur.next == null || cur.next.next == null){
break;
}
//如果要删除当前节点,必须找到要删除节点的前一个节点
if (cur.next.val == cur.next.next.val){
//定义变量保存重复值的第一个元素
int value = cur.next.val;
//循环判断是否有重复的多个元素,将其都删除
while (cur.next != null && cur.next.val == value){
cur.next = cur.next.next;
}
//如果不重复,则指针后移指向后一个节点继续判断
}else {
cur = cur.next;
}
}
return newHead.next;
}
原文:https://www.cnblogs.com/mx-info/p/14881839.html