📅  最后修改于: 2023-12-03 14:56:19.203000             🧑  作者: Mango
这是一个用于删除已排序链表中重复项的Java程序。该算法的时间复杂度为 O(n),其中 n 为链表的长度。
算法的基本思想是使用两个指针遍历链表,第一个指针(称为当前指针)指向当前节点,第二个指针(称为前一个指针)指向当前节点的前一个节点。
如果当前节点的值与前一个节点的值相同,则将前一个指针指向下一个节点,直到找到一个值不同的节点。将当前指针指向该节点。
如果当前节点的值与前一个节点不相同,将两个指针同时向后移动一位。
重复以上步骤,直到遍历完整个链表。
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return null;
}
ListNode current = head;
while (current.next != null) {
if (current.val == current.next.val) {
current.next = current.next.next;
} else {
current = current.next;
}
}
return head;
}
}
下面是一个基本使用示例:
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(1);
ListNode node3 = new ListNode(2);
node1.next = node2;
node2.next = node3;
Solution solution = new Solution();
ListNode result = solution.deleteDuplicates(node1);
// result 的值为 (1) -> (2)