• LeetCode算法扫题系列83


    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104582.html

    LeetCode算法第83题(难度:简单)

    题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。(English:Given a sorted linked list, delete all duplicates such that each element appear only once.

    示例 1:

    输入: 1->1->2
    输出: 1->2

    示例 2:

    输入: 1->1->2->3->3
    输出: 1->2->3

    简述实现思路:这种题目涉及到链表操作,需要对链表结构比较熟悉,去除重复元素,因为是有序链表,那么重复的元素必然是并列的,那么就简单了,一次遍历,找到与前一个元素值相同的元素,将其删除即可,实现的时候需要注意一点,这里涉及节点删除操作,我们表面上要找的是重复的值的节点,实际我们需要的是该节点的上一节点,因为删除操作需要依据上一节点来操作,如下代码中的preNode,还有一点需要注意,那就是针对链表头节点和尾节点的特殊处理,此处尾节点的处理可以归结到遍历中去,但头节点的处理需要单独列出来,所有针对链表的操作,都需要对头节点和尾节点的情况进行单独思考实现,一旦与基本节点情况不一致,必须单独处理。

    Java实现源码:

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 class Solution {
    10   public ListNode deleteDuplicates(ListNode head) {
    11     ListNode node = head;
    12     ListNode preNode = null;//初始化上节点
    13     while(node != null){
    14       if(preNode == null){//说明是头节点
    15         preNode = head;
    16       }else{
    17         if(preNode.val == node.val){//找到重复节点node,preNode为其上一节点
    18           node = node.next;
    19           preNode.next = node;//删除当前节点
    20         }else{
    21           node = node.next;
    22           preNode = preNode.next;
    23         }
    24       }
    25     }
    26     return head;
    27   }
    28 }

     精简代码版:

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 class Solution {
    10     public ListNode deleteDuplicates(ListNode head) {
    11         ListNode node = head;
    12         while(node != null){
    13             if(node.next == null){//末节点
    14                 return head;
    15             }
    16             if(node.val == node.next.val){
    17                 node.next = node.next.next;
    18             }else{
    19                 node = node.next;
    20             }
    21         }
    22         return head;
    23     }
    24 }
  • 相关阅读:
    多表关联 update
    pdf转成图片
    JS中也可以使用JSTL和EL标签
    JSTL String时间转成 date
    SQL函数创建错误
    使用 itext、flying-saucer 实现html转PDF(转)
    Redis 命令参考
    1、课程介绍
    layui 弹出框提交表单
    一张图解析
  • 原文地址:https://www.cnblogs.com/V1haoge/p/9104582.html
Copyright © 2020-2023  润新知