剑指offer15

2019-07-08  本文已影响0人  MonarchNie

题目描述

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

解题思路分析

其实吧,这道题对着代码自然而然就知道怎么写的了,直接上代码吧

代码实现

public ListNode deleteDuplication(ListNode pHead) {
    //pHead为空或者链表只有一个元素时,直接返回
    if (pHead == null || pHead.next == null) {
        return pHead;
    }
    //如果头节点开始就开始有重复的话,那就定位到把重复的头节点去点的那个节点,利用递归再继续计算
    if (pHead.val == pHead.next.val) {
        ListNode pNode = pHead.next;
        //去点所有跟头节点重复的节点
        while (pNode != null && pNode.val = pHead.val) {
            pNode = pNode.next;
        }
        //递归调用
        return deleteDuplication(pNode);
    } else {
        //如果头节点没有重复,那就可以递归的调用来计算留下头节点之后的链表的去重了
        pHead.next = deleteDuplication(pHead.next);
        return pHead;
    }
}
上一篇下一篇

猜你喜欢

热点阅读