原题
解题思路
利用两个节点node1与node2进行遍历,node2是node1的后驱节点
if(node1.next.val == node2.next.val) 那么此时存在重复的节点,
记录下此值val,将node1之后的所有值为val的节点删除;
else
node1与node2前进1步;
通过一次遍历可以将链表中重复的元素删除完毕。
图解
代码
public class Solution82 {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode node1 = dummy;
ListNode node2 = dummy.next;
while (node2 != null && node2.next != null){
if (node1.next.val == node2.next.val){
int val = node1.next.val;
while (node1.next != null && node1.next.val == val){
node1.next = node2.next;
node2 = node1.next;
}
}
else {
node1 = node2;
node2 = node1.next;
}
}
return dummy.next;
}
}