LeetCode刷题,删除排序链表中的重复节点二(82)

1,468 阅读1分钟

删除排序链表中的重复节点二

给你一个排序后的重复链表,删除所有出现重复的节点。

解题代码

思路:

  1. 定义一个虚头,然后判断链表头节点开始是否有重复节点。
  2. 如果有重复继续遍历,找到下一个不同的节点,移动虚头指针的位置到当前节点。
  3. 如果没有重复那么当前指针往后走一步,重复此操作直至链表为空。
var deleteDuplicates = function(head) {
  if (!head) return null;
  let ret = new ListNode(-1,head); // 虚头
  let p = ret;
  let q;
  while (p.next) {
    if(p.next.next && p.next.val === p.next.next.val){ // 判断p下一个节点是否有重复
      q = p.next.next; // 如果有重复,那么赋值当前下一个节点给q
      while (q && q.val === p.next.val) q = q.next; // 如果q的值,等于重复节点的值,那么q继续往后走,直至找到不同节点
      p.next = q; // 此时q已经到了不同的节点的位置,将他们连接起来,继续往后循环,直至链表为空
    }else {
      p = p.next; // 如果没有重复,p往后走一步
    }
  }
  return ret.next; // 处理完之后的新链表头结点。
};