题目来源:力扣82
题目描述:
代码及思路:
class Solution {
public ListNode deleteDuplicates(ListNode head) {
/**
判断下一个节点的值与下下个的值是否相同,
相同:循环到没有相同 下一个节点指到值不同的节点上
不同:那么看下一个节点
*/
//引入虚拟节点,删除操作一致,没有位置区别
ListNode dummyNode=new ListNode();
dummyNode.next=head;
// 指到虚拟节点-》这样不会破会虚拟节点的指向
ListNode dummyNodeflow=dummyNode;
//下下个节点为空,表示已经到最后一个节点了,
//前面所有的重复节点已去掉,退出循环
//下个节点为空 是判断头结点是否为空 头节点为空直接返回
while(dummyNodeflow.next!=null&&dummyNodeflow.next.next!=null){
//下个节点与下下个节点相同 循环到不相同为止
if(dummyNodeflow.next.val==dummyNodeflow.next.next.val){
ListNode flag=dummyNodeflow.next;
while(flag.next!=null&&flag.next.val==flag.val){
flag=flag.next;
}
dummyNodeflow.next=flag.next;
//不同直接下一个
}else{
dummyNodeflow=dummyNodeflow.next;
}
}
//循环走下来,所有重复节点都去掉了,直接返回头结点
return dummyNode.next;
}
}