首页 > 学院 > 开发设计 > 正文

删除链表中的重复的结点

2019-11-08 03:05:44
字体:
来源:转载
供稿:网友

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表