这个跟81题一样 我当时 不用变量显示出一个 还以为是这道题的解法, 想多了,运行以后 不用变量的话只能显示出一个
方法一
上面这个完全行不通,于是按照 船长的c代码转移成js,疏忽了两个地方,改过来之后都写对了
上图是正确的代码,飙红是我那两个错误的地方,我这个也把理解表明了,等下次盲写试试
方法二
var deleteDuplicates = function (head) {
if (!head) {
return null;
}
// 要引用头节点 是因为可能第一个都开始重复
let ret = new ListNode(-1, head), pre = ret;
let cur = head;
while (cur && cur.next) {
// pre和cur 一前一后 两个指针 如果不相等 刚好正常往后面走
if (pre.next.val !== cur.next.val) {
pre = pre.next;
cur = cur.next
} else {
// 后面一个跟前面一个相当 需要处理 相等就继续往后面走
// cur && cur.next 这儿 还需要判断一次 否则还会报错
while (cur && cur.next && pre.next.val === cur.next.val) {
cur = cur.next;
}
// 一直找到不想等跳出来 把不想等的街道pre上面
pre.next = cur.next;
cur = cur.next;
}
}
return ret.next;
};
看了助教的讲解, 用两个指针的方法也写了一遍 除了
// cur && cur.next 这儿 还需要判 断一次 否则还会报错while (cur && cur.next && pre.next.val === cur.next.val) {
这一步不知道为啥还要在判断之外,其他都能理解