剑指offer

56-删除链表中重复的结点

2020-05-29  本文已影响0人  马甲要掉了

题目描述

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

代码

function deleteDuplication(pHead) {
 if (pHead == null || pHead.next == null) {
   return pHead // 只有0个或1个结点,则返回

 }
 if (pHead.val === pHead.next.val) {
   let pNode = pHead.next
   while (pNode != null && pHead.val === pNode.val) {
     pNode = pNode.next 
      // 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点
   }
   return deleteDuplication(pNode)  // 从第一个与当前结点不同的结点开始递归

 } else {
      // 当前结点不是重复结点
      // 保留当前结点,从下一个结点开始递归
   pHead.next = deleteDuplication(pHead.next)
   return pHead
 }
}
上一篇 下一篇

猜你喜欢

热点阅读