「力扣」83. 删除排序链表中的重复元素
「力扣」83. 删除排序链表中的重复元素
题目描述
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例 1:
输入:head = [1,1,2]
输出:[1,2]
示例 2:
输入:head = [1,1,2,3,3]
输出:[1,2,3]
提示:
- 链表中节点数目在范围
[0, 300]
内 -100 <= Node.val <= 100
- 题目数据保证链表已经按升序 排列
题解
链表是升序的说明重复的值一定是连续的。
- 如果链表是空的,或者只有一个节点,则直接返回即可。
- 如果链表不是空的,则需要迭代列表。如果当前节点和当前节点的下一个节点值相同,则需要将当前节点的值指向下一个节点的下一个节点。
图中两个深绿色的节点值相同,所以应该删除掉后一个,那么就需要将当前节点指向当前节点的下一个的下一个节点current.next = current.next.next
。如果两个值不相等的时候,则current
节点后移即可。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode current = head;
while(current.next != null) {
if (current.val == current.next.val) {
current.next = current.next.next;
} else {
current = current.next;
}
}
return head;
}
}
提交代码到力扣: