1、题目:给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
2、实现( 因为已排序,所以元素若重复,必然在其下一位)(这里为在vscode上看见实现效果,直接使用具名函数)
(1)定义链表结构
(2)定义头结点
(3)分两种情况
1)链表为空链表(直接返回)
2)链表非空(相等删除,不等指针下移一位)
(4)调用
3、完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>删除链表中的重复元素</title>
</head>
<body>
<p>
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
</p>
<p>
输入:head = [1,1,2]
输出:[1,2]
</p>
<p>
输入:head = [1,1,2,3,3]
输出:[1,2,3]
</p>
</body>
<script>
class ListNode{
constructor(val, next){
this.val = val
this.next = next
}
}
let head = new ListNode(1)
head.next = new ListNode(1)
head.next.next = new ListNode(2)
deleteDuplicates(head)
function deleteDuplicates(head) {
// 头结点为空,直接返回
if (!head) return head;
// 头结点非空时,让当前指针指向head,在循环中判断,当循环中一个节点的值和该节点下一节点的值相等时,删除;否则,指针移向下一位
let cur = head
while (cur.next) {
if (cur.val === cur.next.val) {
cur.next = cur.next.next
} else {
cur = cur.next
}
}
console.log(head);
return head
}
</script>
</html>
4、力扣使用代码
var deleteDuplicates = function (head) {
// 头结点为空,直接返回
if(!head) return head;
// 头结点非空时,让当前指针指向head,在循环中判断,当循环中一个节点的值和该节点下一节点的值相等时,删除;否则,指针移向下一位
let cur = head
while (cur.next) {
if (cur.val===cur.next.val) {
cur.next=cur.next.next
}else{
cur = cur.next
}
}
return head
}