【链表】【打卡第144道】: leetcode 83. 删除排序链表中的重复元素 (重复元素出现一次)

1、题目描述

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

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

2、算法分析

和以下题目进行比较

① 删除其中的一个结点:【链表】【打卡第141道】:《剑指Offer》3刷:JZ18 删除链表的节点_CodingLJ-CSDN博客1、题目描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点2、算法分析链表结点的删除,主要是链表结点方向的改变。首先判断第一个结点的值是否等于val,等于的话直接返回链表的下一个结点。定义一个结点temp指向head结点,然后判断temp.ne.https://blog.csdn.net/Sunshineoe/article/details/121732509

② 删除链表中重复的结点,重复结点不保留

【链表】【打卡第142道】:《剑指Offer》3刷:JZ76 删除链表中重复的结点_CodingLJ-CSDN博客h​​​​​​​s1、题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5数据范围:链表长度满足,链表中的值满足进阶:空间复杂度,时间复杂度例如输入{1,2,3,3,4,4,5}时,对应的输出为{1,2,5},对应的输入输出链表如下图所示:2、算法分析题目中要求的是删除链表中重复的元素。比如:1-...https://blog.csdn.net/Sunshineoe/article/details/121733480本题是链表中重复结点只保留一次。

思路:

先判断当前结点是否为null,为null返回head

定义ListNode  current = head;

遍历current就可以。接下来判断if(current.val == current.next.val),相邻相等,删除第二个相等的。current.next = current.next.next;不等的话,current = current.next;

3、代码实现

/**
 * 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) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode current = head;
        while(current != null && current.next != null){
            if(current.val == current.next.val){
                current.next = current.next.next;
            }else{
                current = current.next;
            }
        }
        return head;
    }
}

おすすめ

転載: blog.csdn.net/Sunshineoe/article/details/121746754