删除排序链表中的重复元素1

邮差的信 提交于 2019-12-03 10:10:12

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

示例 1:

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

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

 

解答:

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

  解法:

  

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!