一、题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
二、思路
只要当前节点(currentNode)的值与下一个节点(currentNode.next)的值相同,则删除currentNode.next,currentNode指向不变;不相同时则将currentNode指向其下一个节点。
因此,该方法的时间复杂度为O(n),空间复杂度为O(1)。
三、代码实现
public class Number83 {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
//用于记录头结点
ListNode currrentNode = head;
//只要当前节点的值等于下一个节点的值,则删除下一个节点
while (currrentNode != null && currrentNode.next != null) {
if (currrentNode.val == currrentNode.next.val) {
currrentNode.next = currrentNode.next.next;
} else {
currrentNode = currrentNode.next;
}
}
return head;
}
}
执行结果: