82. 删除排序链表中的重复元素 II(java链表)

    科技2024-05-11  94

    目录

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

    示例 1:

    输入: 1->2->3->3->4->4->5 输出: 1->2->5

    示例 2:

    输入: 1->1->1->2->3 输出: 2->3

    思路

    注意这题是去掉重复的节点(相同节点全部删除),而不是简单的去重,所以在遍历节点过程中,每一个节点都需要向前探测,直到节点值不等于后缀节点时结束,并对这一过程加入计数器,如果计数器大于 1 ,则说明是重复的节点,直接删除掉,如计数器等于 0 ,则表示不重复,直接加入目标链表;

    代码

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode root, r = new ListNode(0), p = head; root = r; while (p != null){ ListNode q = p; int cnt = 0; while (q.next != null && q.val == q.next.val) { q = q.next; cnt++; } p = q.next; if (cnt == 0){ r.next = q; r = q; } } r.next = null; return root.next; } }
    Processed: 0.019, SQL: 8