题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
算法解析: 我们从头到尾遍历整个链表,如果当前结点值和下一结点值相同,就都可以删除,但我们需要将之前的结点保存下来,用于保证链表不会在删除的过程中断开,当然需要注意的是,如果需要删除的结点包括头结点,那么我们需要实时更新头结点。
代码如下:
public ListNode deleteDuplication(ListNode pHead) { if (pHead == null){ return null; } ListNode temp = pHead; ListNode PReNode = null; while (temp != null){ ListNode pNext = temp.next; boolean needDelete = false; if (pNext != null && pNext.val == temp.val){ needDelete = true; } if (!needDelete){ preNode = temp; temp = temp.next; }else{ int value = temp.val; ListNode pToBeDel = temp; while (pToBeDel != null && pToBeDel.val == value){ pNext = pToBeDel.next; pToBeDel = pNext; } if (preNode == null){ pHead = pNext; }else { preNode.next = pNext; } temp = pNext; } } return pHead; }新闻热点
疑难解答