16.删除排序链表中的重复元素

/*给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        //用虚拟头节点会方便得多,不用再创建一个节点来维护实际的头节点
        ListNode dummyNode = new ListNode(-1);
        dummyNode.next = head;
        //使用双指针
        ListNode cur = head;
        ListNode pre = head;
        while (cur != null){
            //该题目已经是升序排列,所以相同的数据在一起
            while (cur != null && cur.val == pre.val){
                cur = cur.next;
            }
            //删除重复值的节点
            pre.next = cur;
            //更新pre节点
            pre = cur;
        }
        //返回实际的头节点
        return dummyNode.next;
    }
}

 

posted @ 2022-03-10 09:04  随遇而安==  阅读(33)  评论(0编辑  收藏  举报