题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode dummy = new ListNode(-1); // 新定义一个链表
dummy.next = head; // 将新定义的链表接上原链表
ListNode prev = dummy; // 定义靠前的节点为新链表的第一个节点
ListNode curr = head; // 定义靠后的节点为原链表的第一个节点
while (curr != null && curr.next != null) { // 如果靠后的节点不为空,且其再往后的节点也不为空
if (curr.val == curr.next.val) { // 靠后的节点的值等于其再往后的节点的值
ListNode temp = curr.next;
while (temp != null && temp.val == curr.val) { // 如果其再往后的节点不为空,且其再往后的节点的值等于其的值
temp = temp.next; // 则靠后的节点变为其再往后的节点,逐渐往后
}
prev.next = temp;
curr = temp;
} else {
prev = prev.next;
curr = curr.next;
}
}
return dummy.next;
}
}