[路飞]_leetcode-83-删除排序链表中的重复元素

102 阅读1分钟

一、题目描述:

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

 

示例 1:

输入: head = [1,1,2]
输出: [1,2]
复制代码

示例 2:

输入: head = [1,1,2,3,3]
输出: [1,2,3]
复制代码

 

提示:

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

思路:

  1. 因为链表已经是经过升序排列的,所以我们只需要比较当前元素和下一个元素的值的大小;
  2. 如果当前元素的值等于下一个元素的值,那么删除下一个元素, 在链表中的操作就直接将当前节点的下一个节点, 执行下下个节点;
  3. 如果值不相等,则将当前指针换后移一个元素,判断下一个元素是否重合,直到结束;
  4. 为了返回链表的头指针,一开始我们要找个人带跑,保留头指针所在的位置。

图解:

c1.png

c2.png

c3.png

/**
 * 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) {
    if(!head) return null;
    let pre = head , cur = head;
    while(cur){
        if(pre.val != cur.val){
            pre.next = cur;
            pre = cur
            cur = cur.next
        }else{
            cur = cur.next
        }
    }
    pre.next = null
    return head
};

以上我们就完成了操作,欢迎讨论点赞喔