剑指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;
}
}