LeetCode 83:删除排序链表中的重复元素

发布时间:2024年01月03日

一、题目描述

给定一个已排序的链表的头?head?,?删除所有重复的元素,使每个元素只出现一次?。返回?已排序的链表?。

示例 1:

输入:head = [1,1,2]
输出:[1,2]

示例 2:

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

  • 链表中节点数目在范围?[0, 300]?内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序?排列

二、思路分析

三、代码参考

1、Java

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        // 创建虚拟节点,便于最后返回结果
        ListNode preNode = new ListNode(0, head);
        // 创建节点,用于遍历循环
        ListNode currentNode = preNode;
        // 循环链表,只要当前访问节点的下一个节点与下下个节点都存在,才继续访问
        while(currentNode.next != null && currentNode.next.next != null){
            // 判断前一个节点与后一个节点是否相同
            if(currentNode.next.val == currentNode.next.next.val){
                // 遇到相同的值,把它删除掉,即跳过这个节点
                currentNode.next = currentNode.next.next;
            }else{
                // 如果不相等,则 currentNode 向后移动
                currentNode = currentNode.next;
            }
        }
        // 最后返回结果
        return preNode.next;
    }
}

2、Python

class Solution(object):
    def deleteDuplicates(self, head):
        # 创建虚拟节点,便于最后返回结果
        preNode = ListNode(0,head)
        # 创建节点,用于遍历循环
        currentNode = preNode
        # 循环链表,只要当前访问节点的下一个节点与下下个节点都存在,才继续访问
        while currentNode.next and currentNode.next.next :
            # 判断前一个节点与后一个节点是否相同
            if currentNode.next.val == currentNode.next.next.val :
                # 遇到相同的值,把它删除掉,即跳过这个节点
                currentNode.next = currentNode.next.next
            else :
                # 如果不相等,则 currentNode 向后移动
                currentNode = currentNode.next
        # 最后返回结果
        return preNode.next

文章来源:https://blog.csdn.net/Jarvs/article/details/135366211
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。