82. Remove Duplicates from Sorted List II
1. 问题描述:
输入是一个有序链表,要求删除所有重复值的节点,只留下都是唯一值的节点。返回此链表。
2. 解决思路:
解决这个问题,我们首先会想到一个边界问题,就是链表头会不会变。如果变,我们需要引入一个dummy节点作为链表的头节点,然后对链表进行节点删除操作。最后返回dummy->next。
3. java代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
//因为链表头会变,所以new一个虚假node
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode lastNode = dummy;
while(lastNode.next != null && lastNode.next.next != null){
if(lastNode.next.val == lastNode.next.next.val){
int val = lastNode.next.val;
while(lastNode.next != null && lastNode.next.val == val){//注意顺序:先判断是否为null,再取值判断
lastNode.next = lastNode.next.next;
}
} else {
lastNode = lastNode.next; //错误 lastNode.next = lastNode.next.next 会改变dummy.next的值
}
}
return dummy.next;
}
}
4. 算法评估:
希望与大家多多交流指正。