likes
comments
collection
share

【算法】删除排序链表中的重复元素 II难度:中等 题目: 给定一个已排序的链表的头 head ,删除原始链表中所有重复数

作者站长头像
站长
· 阅读数 68

难度:中等

题目:

给定一个已排序的链表的头 head ,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。

示例 1:

【算法】删除排序链表中的重复元素 II难度:中等 题目: 给定一个已排序的链表的头 head ,删除原始链表中所有重复数

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

【算法】删除排序链表中的重复元素 II难度:中等 题目: 给定一个已排序的链表的头 head ,删除原始链表中所有重复数

输入:head = [1,1,1,2,3]
输出:[2,3]

提示:

  • 链表中节点数目在范围 [0, 300]
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

解题思路:

编写一个算法来删除已排序链表中所有重复数字的节点,只保留不同的数字。这里的关键在于当遇到重复的数字时,需要跳过所有这些重复的节点,并将指针直接指向最后一个该数字的节点之后的那个节点。

  1. 创建哑节点:为了方便处理头节点可能被删除的情况,我们可以在链表前面添加一个哑节点。
  2. 初始化指针:创建一个指针 prev 指向哑节点,创建一个指针 curr 指向链表的头节点。
  3. 遍历链表:遍历链表直到 curr 到达末尾。
  4. 检查重复:如果当前节点 curr 的值与下一个节点 curr.next 的值相同,则继续向前遍历直到找到一个不同的节点。
  5. 连接不同节点:一旦找到不同的节点,将 prev.next 设置为这个不同的节点。
  6. 更新指针:如果没有重复节点,则将 prevcurr 都移动到下一个节点。
  7. 返回结果:遍历完成后返回哑节点的下一个节点作为新的头节点。

JavaScript实现:

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var deleteDuplicates = function(head) {
  let dummy = new ListNode(0, head); // 创建哑节点
  let prev = dummy;
  let curr = head;

  while (curr && curr.next) {
    // 如果当前节点和下一个节点的值相同
    if (curr.val === curr.next.val) {
      // 找到下一个不同节点
      while (curr.next && curr.val === curr.next.val) {
        curr = curr.next;
      }
      // 跳过所有重复节点
      prev.next = curr.next;
    } else {
      // 没有重复,正常前进
      prev = prev.next;
    }
    // 移动当前节点
    curr = curr.next;
  }

  return dummy.next; // 返回新的头节点
};

// 示例
// const createLinkedList = (values) => {
//   let dummyHead = new ListNode(0);
//   let current = dummyHead;
//   values.forEach(value => {
//     current.next = new ListNode(value);
//     current = current.next;
//   });
//   return dummyHead.next;
// };

// const list = createLinkedList([1, 2, 3, 3, 4, 4, 5]);
// console.log(deleteDuplicates(list)); // 输出: 1 -> 2 -> 5
转载自:https://juejin.cn/post/7425124409797034034
评论
请登录