龙空技术网

「LeetCode」删除排序链表中的重复元素IIJava题解

Prada 12

前言:

当前同学们对“java链表删除”可能比较关注,各位老铁们都需要学习一些“java链表删除”的相关文章。那么小编同时在网络上收集了一些有关“java链表删除””的相关知识,希望姐妹们能喜欢,朋友们快快来学习一下吧!

# 题目

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

来源:力扣(LeetCode)

链接:

eg:

输入:head = [1,2,3,3,4,4,5]

输出:[1,2,5]

# 代码

/** * 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 {    /**    * 时间复杂度 O(n)    * 空间复杂度 O(1)    */    public ListNode deleteDuplicates(ListNode head) {        if (head == null) {            return head;        }        ListNode dummy = new ListNode(-1);        dummy.next = head;        ListNode cur = dummy;        while (cur.next != null && cur.next.next != null) {            if (cur.next.val == cur.next.next.val){                int tempVal = cur.next.val;                while (cur.next != null && cur.next.val == tempVal) {                    cur.next = cur.next.next;                }            } else {                cur = cur.next;            }        }        return dummy.next;    }}
# 总结

* 这个题目是链表操作的考察题,链表题目一般题意容易理解,考察代码处理细节。

* 在题目处理中,我们使用了 dummy 虚拟节点,可以简化head的处理。常见的 dummy 使用方法如下

    ListNode dummy = new ListNode(-1);    dummy.next = head;    // 逻辑处理    return dummy.next;

* 坚持每日一题,加油!

标签: #java链表删除