美文网首页
82. Remove Duplicates from Sorte

82. Remove Duplicates from Sorte

作者: 窝火西决 | 来源:发表于2019-05-29 22:28 被阅读0次

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

    Example 1:

    Input: 1->2->3->3->4->4->5
    Output: 1->2->5
    Example 2:

    Input: 1->1->1->2->3
    Output: 2->3

    题目

    83. Remove Duplicates from Sorted List又不同,这次是删除有序链表的重复元素,一个不剩。
    同样的,链表有序,意味着重复元素都挨着,但是要删除重复的所有元素,所以可以换一种方式解决,即新建一个头结点,只连接不重复的元素,重复的则跳过去。依照这个想法,代码如下:

    代码

    public ListNode deleteDuplicates(ListNode head) {
            if (head == null || head.next == null) {
                return head;
            }
             ListNode newhead = new ListNode(-1);//设置虚拟头结点
             ListNode tmp = newhead;//游标指针
             while(head != null && head.next != null){
                    if (head.val == head.next.val){//head开始向后移动,当它和其下一个节点相同时
                        while(head.next != null && head.val == head.next.val){//让head不断后移
                            head = head.next;
                        }//此时head指向重复元素的最后一个,所以
                        head = head.next;//head需要再往后走一步
                    }
                    else{//当它与后面元素不相等时,则让tmp.next指向该元素,这里分析一下tmp:
                         //初始阶段,tmp=newhead,执行完 tmp.next = head后,此时newhead.next=head了
                         //tmp后移,而此时newhead不变。随着循环继续,newhead后面的值会由tmp更新,
                         //所以tmp作用就是用来维护以newhead为虚拟头结点的链表。
                        tmp.next = head;
                        tmp = tmp.next;
                        head = head.next;
                    }
                }
             tmp.next = head;
            return newhead.next;
        }
    
    

    相关文章

      网友评论

          本文标题:82. Remove Duplicates from Sorte

          本文链接:https://www.haomeiwen.com/subject/kxnutctx.html