刷题专栏(四):删除排序链表中的重复元素

简介: 刷题专栏(四):删除排序链表中的重复元素

前言

今天的这道题《删除排序链表中的重复元素》,难度处于简单层次,主要考察的是对链表数据结构的理解以及如何操作链表。

image.png

算法题:删除排序链表中的重复元素

删除链表中的重复元素这道题,从题目标题就给出了两个关键信息,第一是链表结构,第二就是排序按照升序排列。

通过这两个信息,就基本可以解决这道题。

我的思路呢,主要还是通过中间变量来实现链表的拼接的。

首先声明一个结果链表,再通过循环体内的数字判断来进行拼接。

在循环体内,每次获取到和上一次的历史值不同时,就将当前值存入result结果链表中。

最后得出一个结果链表,打印出来验证一下就可以了。

代码展示

因为leetcode上面的示例并没有转化链表的方法,所以我就自己写了一个,大家可以自用自取。

public class Solution {
    private static ListNode covert(int[] nums){
        ListNode result = new ListNode();
        ListNode z = result;
        for (int i = 0;  i < nums.length; i++){
            z.val = nums[i];
            if(i != nums.length - 1){
                z.next = new ListNode();
                z = z.next;
            }
        }
        return result;
    }
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] l1 = {1};
//        int[] l1 = {1,1,2,3,3};
        ListNode result = solution.deleteDuplicates(covert(l1));
        while (true){
            System.out.println(result.val);
            if(result.next == null){
                break;
            }else{
                result = result.next;
            }
        }
    }
    public ListNode deleteDuplicates(ListNode head) {
        if(head == null){
            return null;
        }
        ListNode result = new ListNode();
        result.val = head.val;
        ListNode z = result;
        ListNode oldListNode = head.next;
        int old = head.val;
        while (true){
            if(oldListNode == null){
                break;
            }
            if(oldListNode.val != old){
                z.next = new ListNode();
                z.next.val = oldListNode.val;
                z = z.next;
            }
            if(oldListNode.next == null){
                break;
            }
            old = oldListNode.val;
            oldListNode = oldListNode.next;
        }
        return result;
    }
}

执行结果展示:

由于前两次没有考虑到原始链表为空,和原始链表长度为1的情况,提交错了两次,可惜。

image.png

总结

这道题的学习点在于数据结构的链表的理解和使用。

目录
相关文章
|
2月前
|
程序员
【刷题记录】移除链表元素
【刷题记录】移除链表元素
01_移除链表元素
01_移除链表元素
|
2月前
|
存储 算法
LeetCode第83题删除排序链表中的重复元素
文章介绍了LeetCode第83题"删除排序链表中的重复元素"的解法,使用双指针技术在原链表上原地删除重复元素,提供了一种时间和空间效率都较高的解决方案。
LeetCode第83题删除排序链表中的重复元素
|
2月前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
2月前
【刷题记录】链表的回文结构
【刷题记录】链表的回文结构
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
42 5
|
2月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
33 4
|
2月前
|
机器学习/深度学习
【刷题记录】相交链表
【刷题记录】相交链表
|
2月前
【刷题记录】链表的中间结点
【刷题记录】链表的中间结点
|
2月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
21 0