存在一个按升序排列的链表,给你这个链表的头节点 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 * Definition for singly-linked list. 3 * function ListNode(val, next) { 4 * this.val = (val===undefined ? 0 : val) 5 * this.next = (next===undefined ? null : next) 6 * } 7 */ 8 /** 9 * @param {ListNode} head 10 * @return {ListNode} 11 */ 12 var deleteDuplicates = function(head) { 13 let p = head; 14 while (p && p.next) { //当前元素和下个元素都有值 15 if(p.val === p.next.val) { 16 p.next = p.next.next; 17 } else { //如果当前的值和下一个值相同,就不往后移动,直接删除后面哪一个即可,因为如果第三个值和第一个值相同还要再比一遍 18 p = p.next; 19 } 20 } 21 return head; //删除完成之后,只需要返回原链表的头部 22 };