**题目:**存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。
输入:head = [1,1,2]
输出:[1,2]
输入:head = [1,1,2,3,3]
输出:[1,2,3]
解法:一次遍历
本题中一个很重要的点是:升序链表,即重复节点在链表中是连续的,所以我们可以比较前后的节点是否相等
- 定义一个指针(
cur),指向头节点 - 将该指针指向的节点与下一个节点是否相等
- 若是相等,将该节点的指向下下个节点(
cur.next.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) {
return head
}
let cur = head;
while (cur.next) {
if (cur.val === cur.next.val) {
cur.next = cur.next.next
} else {
cur = cur.next
}
}
return head
};