题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

解题思路

需求两个指针pre,q以及头节点指针,这里直接用参数里面的pHead即可
q用来判断是否有重复节点以及移除重复节点
然后用pre指向q.next

代码

// 1->2->2->4   => 1->4
// 1->1->2->4 => 2->4
// 1->2->3 => 1->2->3
// 1->2->3->3 => 1->2
// 1->1->2->2->3 => 3
public static ListNode deleteDuplication(ListNode pHead)
{
ListNode pre = null,q = pHead;
boolean flag = false;
while (q != null)
{
//存在重复节点
while (q.next != null && q.val == q.next.val)
{
flag = true;
q = q.next;
}
if (flag == false) //没有重复的
{
pre = q;
q = q.next;
}
else
{
q = q.next;//要向后移一下,不移的话q还是重复节点中最后一个节点
flag = false;
if(pre == null){//如果pre为空
pHead = q;//更新pHead
}else{//pre不为空
pre.next = q;//更新pre.next
}
}
}
return