目录
1.题目
2.思路
创建一个虚拟头节点
然后我们开始遍历整个链表,判断此节点和下个节点的值是否相等
如果相等,我们就让指针向后走
此时我们发现,前后两个值不相等了。
所以我们就把cur尾插到之前创建的头节点上
然后我们重复以上操作,直到cur走完整个链表,我们就可以得到
此时返回新链表即可
3.代码实现
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
ListNode newHead = new ListNode(-1);//虚拟头节点
ListNode cur = pHead;//用来进行遍历
ListNode tmp = newHead;//在进行尾插时,我们用tmp来进行。
//newHead留着用来找最后得到的链表的头
while(cur != null ){//遍历链表
if(cur.next != null &&cur.val == cur.next.val) {//判断此时节点前后是否重复
while(cur.next != null &&cur.val == cur.next.val) {
//如果不重复就一直走到重复
cur = cur.next;
}
cur = cur.next;
}else{//此时不重复,我们进行尾插
tmp.next = cur;
tmp = cur;
cur = cur.next;
}
}
tmp.next = null;//最后把得到的新链表的尾节点置为空,防止最后尾插进来的节点还留着之前链
//表的下一个地址
return newHead.next;
}
}