likes
comments
collection
share

【算法】删除排序链表中的重复元素难度:简单 题目: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元

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

难度:简单

题目:

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例 1:

【算法】删除排序链表中的重复元素难度:简单 题目: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元【算法】删除排序链表中的重复元素难度:简单 题目: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元

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

示例 2:

【算法】删除排序链表中的重复元素难度:简单 题目: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元

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

提示:

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

解题思路:

要删除一个已排序链表中的重复元素,使得每个元素只出现一次,我们可以使用一个简单的遍历方法。由于链表已经是排序好的,我们可以直接遍历链表并检查当前节点与其后继节点的值是否相同。如果相同,则跳过重复的节点;如果不相同,则继续遍历。

  1. 初始化指针:创建一个指针 current 指向链表的头节点。
  2. 遍历链表:遍历链表直到 current.next 为空。
  3. 检查重复:如果当前节点 current 的值与下一个节点 current.next 的值相同,则跳过下一个节点,即将 current.next 设置为 current.next.next
  4. 继续遍历:如果当前节点 current 的值与下一个节点 current.next 的值不同,则将 current 指针移动到下一个节点。
  5. 返回结果:遍历完成后返回链表的头节点。

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 current = head;
  while (current && current.next) {
    if (current.val === current.next.val) {
      current.next = current.next.next; // 跳过重复节点
    } else {
      current = current.next; // 继续遍历
    }
  }
  return head;
};

// 示例
// 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, 1, 2]);
// console.log(deleteDuplicates(list)); // 输出: 1 -> 2
转载自:https://juejin.cn/post/7423949528514887706
评论
请登录