17.删除链表中重复的节点

在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留。

数据范围:

链表中节点 val 值取值范围 [0,100]。链表长度 [0,100]。

样例1:

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

样例2:

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

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplication(ListNode head) {
        //创建一个虚拟头节点,简化边界条件处理
        ListNode node = new ListNode(-1);
        node.next = head;
        //初始化指针p,指向当前确定不重复的最后一个节点
        ListNode p = node;
        //遍历链表
        while(p.next!=null){
            //初始化q指针,从p.next开始检查重复
            ListNode q = p.next;
            //移动指针q,直到找到最后一个重复节点
            while(q.next!=null&&q.next.val==q.val)q = q.next;
            //判断是否发现重复节点,如果没有重复,移动p指针
            if(q == p.next) p = q;
            //否则,跳过所有重复节点
            else p.next = q.next;
        }
        //返回处理后的链表头节点
        return node.next;
    }
}
posted @ 2025-05-14 10:41  回忆、少年  阅读(9)  评论(0)    收藏  举报