给定一个已排序的链表的头 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;
};