题目:
存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
思路:
1.创建三个结点,p1 = head; p2 = head.next; pre = null;
2.当p1的值不等于p2的值时,三个结点一起向后遍历。
3.当p1的值等于p2的值时,p1不动,p2向后遍历。直至p1的值不等于p2的值。
4.此时让pre.next = p2; p1 = p2; p2 = p2.next;
5.我们要考虑到链表刚开始就有重复结点的情况。
输出head,即3–>7–>9
核心代码:
Node pre = null;
Node p1 = head;
Node p2 = head.next;
while(p2 != null){
if(p1.val != p2.val){
pre = p1;
p1 = p2;
p2 = p2.next;
}else{
while(p2 != null && p1.val == p2.val){
p2 = p2.next;
if(pre == null){
head = p2;
}else{
pre.next = p2;
}
p1 = p2;
if(p2 != null){
p2 = p2.next;
}
}
}
}
完整程序:
https://github.com/WangWenQian12/Java_Practice/blob/master/JavaSE/IDEA/LinkedList/DeleteDuplication/src/DeleteDuplication.java