题目
给定一个已排序的链表的头
head
,删除所有重复的元素,使每个元素只出现一次,返回已排序的链表 。
输入: head = [1,1,2] 输出: [1,2]
题解
根据题意我们得知这是删除链表中的重复元素,所以我们先进行判断链表和链表的下一项其中某一项是否为空,如果其中一项为空则没有往下继续执行的必要性直接返回当前链表即可,如果不为空则往下走,声明一个
prve
变量,指向当前的链表,在声明一个next
变量,指向的是当前prve
变量下一项,也就是当前链表的下一项,然后我们使用循环,循环的终止条件为当前的next
变量转换为布尔值之后为false
则退出循环,进入循环后进行判断,prve
变量val
属性是否与next
变量val
属性相等,如果相等则将当前prve
变量的下一项替换成next
变量的下一项,在将next
变量赋值成null
,赋值成null
是为了防止有数据残留,然后再将prve
变量的下一项赋值给next
变量,这样每次进行判断的话都是当前链表的下一项和下下一项进行比较,如果prve
变量val
属性与next
变量val
属性不相等,那么就将next
变量赋值给prve
变量,在将next
变量值置为null
之后,在将prve
变量的下一项赋值给next
变量,以此往复,最后在将入参head
返回出去即可
/** * 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||!head.next) return head; let prve = head; let next = prve.next; while(next) { if(prve.val === next.val) { prve.next = next.next; next = null; next = prve.next; }else { prve = next; next = null; next = prve.next; } } return head; };
坚持努力,无惧未来!