📌  相关文章
📜  用于从已排序的链表中删除重复项的Java程序(1)

📅  最后修改于: 2023-12-03 14:56:19.203000             🧑  作者: Mango

用于从已排序的链表中删除重复项的Java程序

这是一个用于删除已排序链表中重复项的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)