剑指offer-18-2. 删除链表中重复的结点
链表
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路:
采用递归的方法查找从头节点开始重复的节点
- 如果没有重复节点,pHead.next指向deleteDuplication(pHead.next)返回的pHead.next本身
- 如果有重复节点则pHead.next指向pHead.next.next…next(根据if判断决定)
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
//base case
if (pHead == null || pHead.next == null)
return pHead;
ListNode next = pHead.next大专栏 剑指offer-18-2. 删除链表中重复的结点punctuation">;
if (pHead.val == next.val) {
while (next != null && pHead.val == next.val)
next = next.next;
return deleteDuplication(next);//没有直接返回next的原因是next节点后可能还会有重复节点
}else {
//如果没有重复节点,pHead.next指向deleteDuplication(pHead.next)返回的pHead.next本身,如果有重复节点则pHead.next指向pHead.next.next...next(根据if判断决定)
pHead.next = deleteDuplication(pHead.next);
return pHead;
}
}
}