题目
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
解题思路
因为是一直的有序列表,所以只需要循环一次即可,设定虚拟头节点指向head,再定义一个p节点指向虚拟头节点,当next节点和next节点的next节点有值时进行循环,每次循环判断next节点是否与下一个节点相等,如果相等,则循环删除后面可能相等的值(删除方法是让当前节点的next节点指向next节点的next节点);不相等,则直接move到后一节点
var deleteDuplicates = function(head) {
// 老规矩,非空判断
if(!head) return head;
// 定义虚拟头节点指向head节点
const vNode = new ListNode(0, head);
// 定义开始节点
let p = vNode;
while(p.next && p.next.next) {
// next节点和next.next节点值相等时,进入删除操作
if (p.next.val === p.next.next.val) {
let x = p.next.val;
// 从next节点值与第一个值相等开始删除,直到不相等为止
while(p.next && p.next.val === x) {
p.next = p.next.next;
}
} else {
// 不相等,则进入下一个循环
p = p.next;
}
}
// 返回虚拟头几点的next,即head;
return vNode.next;
};