leetCode:83. 删除排序链表中的重复元素

141 阅读1分钟

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

解题思路

因为是有序的链表,所以只需要循环遍历一次链表:当遇到当前节点值与下一个节点值相同时,则让当前节点指向当前节点的下一个节点的下一个节点,否则,让当前节点向后走一位(这里有个需要理解的点是, 如果当前属于删除相同节点,那么当前节点的位置没有变,循环节点的条件是当前节点的next有值)

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var deleteDuplicates = function(head) {
    // 空链表直接返回
    if (!head) return head;
    
    // 定义头节点p
    let p = head;
    // 循环条件是当前节点的next节点值不为空,为空说明到头了,应该终止循环
    while(p.next) {
        // 当前节点的值与next节点值相同,则删除next节点(当前节点next指向next节点的next节点)
        if (p.val === p.next.val) {
            p.next = p.next.next;
        } else {
            // next节点值与当前节点值不相同,指针指向下一个节点。
            p = p.next
        }
    }
    // 最后返回删除完的原链表即可
    return head;
};