[82] 删除排序链表中的重复元素 II(10)

79 阅读1分钟

这个跟81题一样 我当时 不用变量显示出一个 还以为是这道题的解法, 想多了,运行以后 不用变量的话只能显示出一个

方法一

image.png 上面这个完全行不通,于是按照 船长的c代码转移成js,疏忽了两个地方,改过来之后都写对了

image.png 上图是正确的代码,飙红是我那两个错误的地方,我这个也把理解表明了,等下次盲写试试

方法二

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) { 

这一步不知道为啥还要在判断之外,其他都能理解