zoukankan      html  css  js  c++  java
  • 删除排序链表中的重复元素1

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

    示例 1:

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

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

    解答:

      首先此链表是排序的链表,不会出现相同的元素中间有其它的元素。

      解法1:

      

    public static ListNode deleteDuplicates(ListNode head) {
        /*定义一个哑节点*/
        ListNode dumb=new ListNode(0);
        /*哑节点的下一个节点指向头节点*/
        dumb.next=head;
        /*快指针*/
        ListNode fast=head;
        /*慢指针*/
        ListNode slow=dumb;
        /*当快指针不为null时继续*/
        while (fast!=null){
          /*如果fast到了尾节点或fast的数字与fast的next的数字不一样时进入*/
          if(fast.next==null||fast.val!=fast.next.val){
            /*如果相邻,则slow引用指向fast所指的对象*/
            if(slow.next==fast){
              slow=fast;
            }else{
              /*如果不相邻,则说明中间存在重复元素,将slow的下一个指向fast,这样就抹去了相同的元素其中的一个*/
              slow.next=fast;
              /*同时slow移向自己的下一个*/
              slow=slow.next;
            }
          }
          fast=fast.next;
        }
        return dumb.next;
      }
    View Code

     解法2:

    public static ListNode deleteDuplicates1(ListNode head){
        /*定义一个引用指向头*/
        ListNode curr=head;
        /*当当前不为空和下一个不为空时*/
        while (curr!=null&&curr.next!=null){
          /*如果当前的值和下一个的值一样则当前节点的下一个节点指向下下一个节点,否则当前节点向后移动一位*/
          if(curr.next.val==curr.val){
            curr.next=curr.next.next;
          }else {
            curr=curr.next;
          }
        }
        return head;
      }
    View Code
  • 相关阅读:
    使用cocoapods出现问题fetch of the ‘master’ 的解决方法
    说说ASP.NET的表单验证
    php分页类
    php校验
    mySQL时间
    asp .NET弹出窗口 汇总(精华,麒麟创想)
    (转)MVC 3 数据验证 Model Validation 详解
    (转)linux性能优化总结
    (转)ASP.NET缓存全解析6:数据库缓存依赖
    SQL Server是如何让定时作业
  • 原文地址:https://www.cnblogs.com/wuyouwei/p/11787781.html
Copyright © 2011-2022 走看看