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

    
    

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

    
    

    示例 1:

    
    

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

    
    

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

    
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。




    public
    class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; } }

    解题思路:

    1、首先要知道,链表是如何实现删除元素--当前结点的next指针指向结点A,让其不指向A结点,指向其他结点,就实现了A结点的删除。

    2、当前结点和后一结点做比较,如果两者值相等,当前结点的next指针不指向与其值相等的下一结点,而是指向下一结点的next

      如果不相等,进行下一个结点和其next指针所指向结点的比较。

    3、利用链表的原理和递归的思想

    代码1、

    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            ListNode guardNode = new ListNode(0);
            ListNode newLinkedList = guardNode;
            if(head != null) {
                newLinkedList.next = head;
                int val = head.val;
                if (head.next != null) {
                    if (head.val == head.next.val) {
                        //当前节点的next指针指向后一结点的next指针
                        head.next = head.next.next;
                        deleteDuplicates(head);
                    } else {
                        head = head.next;
                    }
                }
            }
    
            return guardNode.next;
        }
    }

    代码2、和代码1的核心思想是一样的,只是优雅了一下代码。执行用时均为1ms,但是内存消耗少了0.2M

    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
           if (head == null) {
                return null;
            }
            if (head.next == null) {
                return head;
            }
            if (head.val == head.next.val) {
                head.next = head.next.next;
                deleteDuplicates(head);
            } else {
                deleteDuplicates(head.next);
            }
            return head;
        }
    }
  • 相关阅读:
    hdu 5352 匈牙利(多重匹配)
    hdu 2112 最短路+stl
    hdu 1811 拓扑排序+并查集+细心
    hdu5407 CRB and Candies
    hdu1018 Big Number
    hdu5410 CRB and His Birthday
    hdu1023 Train Problem II
    hdu4812 D Tree
    hdu1085 Holding Bin-Laden Captive!
    hdu4810 Wall Painting
  • 原文地址:https://www.cnblogs.com/coisini/p/12019579.html
Copyright © 2011-2022 走看看